diff options
-rw-r--r-- | include/all-io.h | 8 | ||||
-rw-r--r-- | include/c.h | 17 | ||||
-rw-r--r-- | libmount/src/lock.c | 4 | ||||
-rw-r--r-- | login-utils/sulogin.c | 4 | ||||
-rw-r--r-- | sys-utils/hwclock-kd.c | 2 | ||||
-rw-r--r-- | sys-utils/rtcwake.c | 2 | ||||
-rw-r--r-- | term-utils/agetty.c | 2 | ||||
-rw-r--r-- | text-utils/tailf.c | 2 |
8 files changed, 25 insertions, 16 deletions
diff --git a/include/all-io.h b/include/all-io.h index 424ab7d3f..2546cff1b 100644 --- a/include/all-io.h +++ b/include/all-io.h @@ -29,7 +29,7 @@ static inline int write_all(int fd, const void *buf, size_t count) } else if (errno != EINTR && errno != EAGAIN) return -1; if (errno == EAGAIN) /* Try later, *sigh* */ - usleep(10000); + xusleep(250000); } return 0; } @@ -49,7 +49,7 @@ static inline int fwrite_all(const void *ptr, size_t size, } else if (errno != EINTR && errno != EAGAIN) return -1; if (errno == EAGAIN) /* Try later, *sigh* */ - usleep(10000); + xusleep(250000); } return 0; } @@ -65,8 +65,10 @@ static inline ssize_t read_all(int fd, char *buf, size_t count) ret = read(fd, buf, count); if (ret <= 0) { if ((errno == EAGAIN || errno == EINTR || ret == 0) && - (tries++ < 5)) + (tries++ < 5)) { + xusleep(250000); continue; + } return c ? c : -1; } if (ret > 0) diff --git a/include/c.h b/include/c.h index 4a9bf3d42..a192fb1dd 100644 --- a/include/c.h +++ b/include/c.h @@ -253,20 +253,27 @@ static inline size_t get_hostname_max(void) return 64; } -#ifndef HAVE_USLEEP /* - * This function is marked obsolete in POSIX.1-2001 and removed in - * POSIX.1-2008. It is replaced with nanosleep(). + * The usleep function is marked obsolete in POSIX.1-2001 and removed in + * POSIX.1-2008. This is replaced with nanosleep() that provides more + * advantages (like no interaction with signals and other timer functions. */ -static inline int usleep(useconds_t usec) +#include <time.h> + +static inline int xusleep(useconds_t usec) { +#ifdef HAVE_NANOSLEEP struct timespec waittime = { .tv_sec = usec / 1000000L, .tv_nsec = (usec % 1000000L) * 1000 }; return nanosleep(&waittime, NULL); -} +#elif defined(HAVE_USLEEP) + return usleep(usec); +#else +# error "System with usleep() or nanosleep() required!" #endif +} /* * Constant strings for usage() functions. For more info see diff --git a/libmount/src/lock.c b/libmount/src/lock.c index d9b6f5939..734757d81 100644 --- a/libmount/src/lock.c +++ b/libmount/src/lock.c @@ -650,7 +650,7 @@ int test_lock(struct libmnt_test *ts, int argc, char *argv[]) if (synctime && synctime - tv.tv_sec > 1) { usecs = ((synctime - tv.tv_sec) * 1000000UL) - (1000000UL - tv.tv_usec); - usleep(usecs); + xusleep(usecs); } } @@ -676,7 +676,7 @@ int test_lock(struct libmnt_test *ts, int argc, char *argv[]) * concurrent processes happy. */ if (synctime) - usleep(25000); + xusleep(25000); } return 0; diff --git a/login-utils/sulogin.c b/login-utils/sulogin.c index 4560ee0fb..37d006dde 100644 --- a/login-utils/sulogin.c +++ b/login-utils/sulogin.c @@ -590,7 +590,7 @@ static char *getpasswd(struct console *con) while (cp->eol == '\0') { if (read(fd, &c, 1) < 1) { if (errno == EINTR || errno == EAGAIN) { - usleep(1000); + xusleep(250000); continue; } ret = (char*)0; @@ -993,7 +993,7 @@ int main(int argc, char **argv) if (*usemask & (1<<con->id)) continue; kill(con->pid, SIGHUP); - usleep(5000); + usleep(50000); kill(con->pid, SIGKILL); } } diff --git a/sys-utils/hwclock-kd.c b/sys-utils/hwclock-kd.c index 9ed83436a..8e67009cb 100644 --- a/sys-utils/hwclock-kd.c +++ b/sys-utils/hwclock-kd.c @@ -66,7 +66,7 @@ static int synchronize_to_clock_tick_kd(void) * A2000 RTCs and simply hangs after some time. Inserting a * sleep helps." */ - usleep(1); + xusleep(1); if (ioctl(con_fd, KDGHWCLK, &nowtime) == -1) { warn(_("KDGHWCLK ioctl to read time failed in loop")); diff --git a/sys-utils/rtcwake.c b/sys-utils/rtcwake.c index eedf78d0c..51ffb3c5a 100644 --- a/sys-utils/rtcwake.c +++ b/sys-utils/rtcwake.c @@ -560,7 +560,7 @@ int main(int argc, char **argv) program_invocation_short_name, suspend, devname, ctime(&alarm)); fflush(stdout); - usleep(10 * 1000); + xusleep(10 * 1000); } if (strcmp(suspend, "no") == 0) { diff --git a/term-utils/agetty.c b/term-utils/agetty.c index baa1b38cb..7c0579c63 100644 --- a/term-utils/agetty.c +++ b/term-utils/agetty.c @@ -1589,7 +1589,7 @@ static char *get_logname(struct options *op, struct termios *tp, struct chardata /* The terminal could be open with O_NONBLOCK when * -L (force CLOCAL) is specified... */ if (errno == EINTR || errno == EAGAIN) { - usleep(250000); + xusleep(250000); continue; } switch (errno) { diff --git a/text-utils/tailf.c b/text-utils/tailf.c index 2f611a4cb..d2366a6a0 100644 --- a/text-utils/tailf.c +++ b/text-utils/tailf.c @@ -133,7 +133,7 @@ watch_file(const char *filename, off_t *size) { do { roll_file(filename, size); - usleep(250000); + xusleep(250000); } while(1); } |