55 lines
1.2 KiB
Diff
55 lines
1.2 KiB
Diff
--- 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);
|