udevd: create queue file before daemonizing to reliably block 'settle'
This commit is contained in:
+12
-10
@@ -1408,6 +1408,13 @@ int main(int argc, char *argv[])
|
||||
|
||||
udev_monitor_set_receive_buffer_size(monitor, 128*1024*1024);
|
||||
|
||||
/* create queue file before signalling 'ready', to make sure we block 'settle' */
|
||||
udev_queue_export = udev_queue_export_new(udev);
|
||||
if (udev_queue_export == NULL) {
|
||||
err(udev, "error creating queue file\n");
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (daemonize) {
|
||||
pid_t pid;
|
||||
int fd;
|
||||
@@ -1421,8 +1428,8 @@ int main(int argc, char *argv[])
|
||||
rc = 4;
|
||||
goto exit;
|
||||
default:
|
||||
rc = 0;
|
||||
goto exit;
|
||||
rc = EXIT_SUCCESS;
|
||||
goto exit_keep_queue;
|
||||
}
|
||||
|
||||
setsid();
|
||||
@@ -1521,12 +1528,6 @@ int main(int argc, char *argv[])
|
||||
goto exit;
|
||||
}
|
||||
|
||||
udev_queue_export = udev_queue_export_new(udev);
|
||||
if (udev_queue_export == NULL) {
|
||||
err(udev, "error creating queue file\n");
|
||||
goto exit;
|
||||
}
|
||||
|
||||
memset(&ep_ctrl, 0, sizeof(struct epoll_event));
|
||||
ep_ctrl.events = EPOLLIN;
|
||||
ep_ctrl.data.fd = fd_ctrl;
|
||||
@@ -1708,9 +1709,10 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
}
|
||||
|
||||
udev_queue_export_cleanup(udev_queue_export);
|
||||
rc = 0;
|
||||
rc = EXIT_SUCCESS;
|
||||
exit:
|
||||
udev_queue_export_cleanup(udev_queue_export);
|
||||
exit_keep_queue:
|
||||
if (fd_ep >= 0)
|
||||
close(fd_ep);
|
||||
worker_list_cleanup(udev);
|
||||
|
||||
Reference in New Issue
Block a user