ash: fix sleep built-in not running INT trap immediately on ^C
function old new delta sleep_for_duration 169 149 -20 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
d661cb1977
commit
ce839dea92
@ -76,16 +76,14 @@ void FAST_FUNC sleep_for_duration(duration_t duration)
|
||||
ts.tv_sec = duration;
|
||||
ts.tv_nsec = (duration - ts.tv_sec) * 1000000000;
|
||||
}
|
||||
/* NB: if ENABLE_ASH_SLEEP, we end up here if "sleep N"
|
||||
* is run in ash. ^C will still work, because ash's signal handler
|
||||
* does not return (it longjumps), the below loop
|
||||
* will not continue looping.
|
||||
* (This wouldn't work in hush)
|
||||
/* NB: ENABLE_ASH_SLEEP requires that we do NOT loop on EINTR here:
|
||||
* otherwise, traps won't execute until we finish looping.
|
||||
*/
|
||||
do {
|
||||
errno = 0;
|
||||
nanosleep(&ts, &ts);
|
||||
} while (errno == EINTR);
|
||||
//do {
|
||||
// errno = 0;
|
||||
// nanosleep(&ts, &ts);
|
||||
//} while (errno == EINTR);
|
||||
nanosleep(&ts, &ts);
|
||||
}
|
||||
#else
|
||||
duration_t FAST_FUNC parse_duration_str(char *str)
|
||||
|
Loading…
Reference in New Issue
Block a user