1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
--- 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);
|