X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=udevd.c;h=701165b9ad0df601ecb53dcf53480843634ae0f9;hp=98e3d54b3382981fdf28c479ea45f7cb4f449d4d;hb=83cc6ab4760817509f1ed1ee429669e563f82caf;hpb=1a4e5303e0309fc629880a5abaf690b571ae6f2f diff --git a/udevd.c b/udevd.c index 98e3d54b3..701165b9a 100644 --- a/udevd.c +++ b/udevd.c @@ -100,6 +100,13 @@ static int udev_event_process(struct uevent_msg *msg) act.sa_flags = 0; sigaction(SIGALRM, &act, NULL); + /* reset to default */ + act.sa_handler = SIG_DFL; + sigaction(SIGINT, &act, NULL); + sigaction(SIGTERM, &act, NULL); + sigaction(SIGCHLD, &act, NULL); + sigaction(SIGHUP, &act, NULL); + /* trigger timeout to prevent hanging processes */ alarm(UDEV_ALARM_TIMEOUT); @@ -914,12 +921,24 @@ int main(int argc, char *argv[], char *envp[]) err("error getting pipes: %s", strerror(errno)); goto exit; } - retval = fcntl(signal_pipe[READ_END], F_SETFL, O_NONBLOCK); + + retval = fcntl(signal_pipe[READ_END], F_GETFL, 0); if (retval < 0) { err("error fcntl on read pipe: %s", strerror(errno)); goto exit; } - retval = fcntl(signal_pipe[WRITE_END], F_SETFL, O_NONBLOCK); + retval = fcntl(signal_pipe[READ_END], F_SETFL, retval | O_NONBLOCK); + if (retval < 0) { + err("error fcntl on read pipe: %s", strerror(errno)); + goto exit; + } + + retval = fcntl(signal_pipe[WRITE_END], F_GETFL, 0); + if (retval < 0) { + err("error fcntl on write pipe: %s", strerror(errno)); + goto exit; + } + retval = fcntl(signal_pipe[WRITE_END], F_SETFL, retval | O_NONBLOCK); if (retval < 0) { err("error fcntl on write pipe: %s", strerror(errno)); goto exit;