From 89d4949f86f4f7b6710e951afefad186c667fd6e Mon Sep 17 00:00:00 2001 From: Christopher Ferris Date: Tue, 9 Sep 2014 13:10:49 -0700 Subject: [PATCH] Use time() instead of clock() for timeouts. The clock() function returns the processor time used by the process. This is not a good timeout mechanism since the code is suspended most of the time waiting for the forked process to finish. Replace with the time() function. Bug: 17154069 Change-Id: Ib383329f9db269445d71a100553b08e71fddda3f --- cmds/dumpstate/utils.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cmds/dumpstate/utils.c b/cmds/dumpstate/utils.c index 85c353e10..c8ee75e30 100644 --- a/cmds/dumpstate/utils.c +++ b/cmds/dumpstate/utils.c @@ -296,7 +296,7 @@ int dump_file_from_fd(const char *title, const char *path, int fd) { /* forks a command and waits for it to finish */ int run_command(const char *title, int timeout_seconds, const char *command, ...) { fflush(stdout); - clock_t start = clock(); + time_t start = time(NULL); pid_t pid = fork(); /* handle error case */ @@ -340,19 +340,19 @@ int run_command(const char *title, int timeout_seconds, const char *command, ... for (;;) { int status; pid_t p = waitpid(pid, &status, WNOHANG); - float elapsed = (float) (clock() - start) / CLOCKS_PER_SEC; + time_t elapsed = time(NULL) - start; if (p == pid) { if (WIFSIGNALED(status)) { printf("*** %s: Killed by signal %d\n", command, WTERMSIG(status)); } else if (WIFEXITED(status) && WEXITSTATUS(status) > 0) { printf("*** %s: Exit code %d\n", command, WEXITSTATUS(status)); } - if (title) printf("[%s: %.1fs elapsed]\n\n", command, elapsed); + if (title) printf("[%s: %ds elapsed]\n\n", command, (int) elapsed); return status; } if (timeout_seconds && elapsed > timeout_seconds) { - printf("*** %s: Timed out after %.1fs (killing pid %d)\n", command, elapsed, pid); + printf("*** %s: Timed out after %ds (killing pid %d)\n", command, (int) elapsed, pid); kill(pid, SIGTERM); return -1; }