--- apmd-3.2.2.orig/apmd.c +++ apmd-3.2.2/apmd.c @@ -343,7 +343,7 @@ /* parent */ int status, retval; ssize_t len; - time_t time_limit; + time_t countdown; if (pid < 0) { /* Couldn't fork */ @@ -356,8 +356,9 @@ /* Capture the child's output, if any, but only until it terminates */ close(fds[1]); fcntl(fds[0], F_SETFL, O_RDONLY|O_NONBLOCK); - time_limit = time(0) + proxy_timeout; + countdown = proxy_timeout; do { + countdown -= 1; while ((len = read(fds[0], line, sizeof(line)-1)) > 0) { line[len] = 0; APMD_SYSLOG(LOG_INFO, "+ %s", line); @@ -372,16 +373,16 @@ goto proxy_done; } - sleep(1); + while (sleep(1) > 0) ; } while ( - (time(0) < time_limit) + (countdown >= 0) || (proxy_timeout < 0) ); APMD_SYSLOG(LOG_NOTICE, "Proxy has been running more than %d seconds; killing it", proxy_timeout); kill(pid, SIGTERM); - time_limit = time(0) + 5; + countdown = 5; do { retval = waitpid(pid, &status, WNOHANG); if (retval == pid) @@ -392,9 +393,9 @@ goto proxy_done; } - sleep(1); + while (sleep(1) > 0) ; - } while (time(0) < time_limit); + } while (countdown >= 0); kill(pid, SIGKILL); status = __W_EXITCODE(0, SIGKILL);