Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e2c86c71 authored by Christopher Ferris's avatar Christopher Ferris
Browse files

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

(cherry picked from commit 89d4949f)

Change-Id: I42f0f24ee53ef99955fd482a1089e39d491f3bd5
parent 86aeb9ef
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -257,7 +257,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 */
@@ -295,19 +295,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;
        }