mirror of
https://github.com/AuxXxilium/eudev.git
synced 2024-12-28 06:35:34 +07:00
udevd: init signal pipe before daemonizing
This commit is contained in:
parent
ede9b54171
commit
ff2eecef88
58
udevd.c
58
udevd.c
@ -1006,6 +1006,35 @@ int main(int argc, char *argv[], char *envp[])
|
||||
goto exit;
|
||||
}
|
||||
|
||||
/* setup signal handler pipe */
|
||||
retval = pipe(signal_pipe);
|
||||
if (retval < 0) {
|
||||
err("error getting pipes: %s", strerror(errno));
|
||||
goto exit;
|
||||
}
|
||||
|
||||
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[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;
|
||||
}
|
||||
|
||||
/* parse the rules and keep them in memory */
|
||||
sysfs_init();
|
||||
udev_rules_init(&rules, 1);
|
||||
@ -1062,35 +1091,6 @@ int main(int argc, char *argv[], char *envp[])
|
||||
close(fd);
|
||||
}
|
||||
|
||||
/* setup signal handler pipe */
|
||||
retval = pipe(signal_pipe);
|
||||
if (retval < 0) {
|
||||
err("error getting pipes: %s", strerror(errno));
|
||||
goto exit;
|
||||
}
|
||||
|
||||
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[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;
|
||||
}
|
||||
|
||||
/* set signal handlers */
|
||||
memset(&act, 0x00, sizeof(struct sigaction));
|
||||
act.sa_handler = (void (*)(int)) sig_handler;
|
||||
|
Loading…
Reference in New Issue
Block a user