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

Commit 11c13abd authored by Christopher Ferris's avatar Christopher Ferris Committed by Gerrit Code Review
Browse files

Merge "Use time() instead of clock() for timeouts."

parents 86aeb9ef e2c86c71
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;
        }