--- 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);
