aboutsummaryrefslogtreecommitdiff
path: root/coreutils/usleep.c
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2017-08-02 16:37:39 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2017-08-02 16:37:39 +0200
commit7c40ddd9500907925041131374cb43eb87ef5494 (patch)
tree415676f7439a3c42e2137f357c8e8904a93007cc /coreutils/usleep.c
parent95f7953f2c46c7b9c799250aa8dc6eb10cc5c726 (diff)
downloadbusybox-7c40ddd9500907925041131374cb43eb87ef5494.tar.gz
NOFORK fixes
"rm -i FILE" and "yes" can now be interrupted by ^C in hush. This also now works: $ usleep 19999999 ^C $ echo $? 130 function old new delta run_pipe 1668 1711 +43 pseudo_exec_argv 312 321 +9 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/0 up/down: 52/0) Total: 52 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'coreutils/usleep.c')
-rw-r--r--coreutils/usleep.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/coreutils/usleep.c b/coreutils/usleep.c
index 7c25aada1..684ab781b 100644
--- a/coreutils/usleep.c
+++ b/coreutils/usleep.c
@@ -38,6 +38,13 @@ int usleep_main(int argc UNUSED_PARAM, char **argv)
bb_show_usage();
}
+ /* Safe wrt NOFORK? (noforks are not allowed to run for
+ * a long time). Try "usleep 99999999" + ^C + "echo $?"
+ * in hush with FEATURE_SH_NOFORK=y.
+ * At least on uclibc, usleep() thanslates to nanosleep()
+ * which returns early on any signal (even caught one),
+ * and uclibc does not loop back on EINTR.
+ */
usleep(xatou(argv[1]));
return EXIT_SUCCESS;