On Tue, Jul 19, 2022 at 12:05:48AM +0200, François-Xavier Carton wrote:
> Technically, no standard guarantees that the handler stays after being
> called once. The implementation could reset it to the default action.

Hmm, didn't know about that.

> One may want to re-add a call to signal here, without error checking, to
> ensure the handler remains in case SIGCHLD is raised multiple times.

Alternatively we could revert this patch and then change the `die` call
to `write` and `_exit`; both of which are async-signal-safe.

        void
        sigchld(int unused)
        {
                if (signal(SIGCHLD, sigchld) == SIG_ERR) {
                        char errmsg[] = "Can't install SIGCHLD handler";
                        write(2, errmsg, sizeof errmsg);
                        _exit(1);
                }
                while (0 < waitpid(-1, NULL, WNOHANG));
        }

This can't call `perror` similar to `die` as that's not signal safe.

- NRK

Reply via email to