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

Commit ed179d2f authored by Rom Lemarchand's avatar Rom Lemarchand Committed by Android (Google) Code Review
Browse files

logwrap: Replace sigprocmask with pthread_sigmask

sigprocmask has undefined behavior when called from a thread.
Replacing with pthread_sigmask to ensure correct behavior if
logwrap() gets called from a thread.

Change-Id: I77b6959d345eac8d7b90039ed8144ead8c19a00c
parent 75c289aa
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -69,7 +69,7 @@ static int parent(const char *tag, int parent_read, int signal_fd, pid_t pid,

    sigemptyset(&chldset);
    sigaddset(&chldset, SIGCHLD);
    sigprocmask(SIG_UNBLOCK, &chldset, NULL);
    pthread_sigmask(SIG_UNBLOCK, &chldset, NULL);

    while (!found_child) {
        if (poll(poll_fds, remote_hung ? 1 : 2, -1) < 0) {
@@ -209,7 +209,7 @@ int logwrap(int argc, char* argv[], int *status, bool ignore_int_quit) {
    sigaddset(&blockset, SIGINT);
    sigaddset(&blockset, SIGQUIT);
    sigaddset(&blockset, SIGCHLD);
    sigprocmask(SIG_BLOCK, &blockset, &oldset);
    pthread_sigmask(SIG_BLOCK, &blockset, &oldset);

    pid = fork();
    if (pid < 0) {
@@ -217,7 +217,7 @@ int logwrap(int argc, char* argv[], int *status, bool ignore_int_quit) {
        rc = -1;
        goto err_fork;
    } else if (pid == 0) {
        sigprocmask(SIG_SETMASK, &oldset, NULL);
        pthread_sigmask(SIG_SETMASK, &oldset, NULL);
        close(parent_ptty);

        child_ptty = open(child_devname, O_RDWR);
@@ -287,7 +287,7 @@ err_socketpair:
    }
    sigaction(SIGCHLD, &oldchldact, NULL);
err_fork:
    sigprocmask(SIG_SETMASK, &oldset, NULL);
    pthread_sigmask(SIG_SETMASK, &oldset, NULL);
err_ptty:
    close(parent_ptty);
err_open: