udevd: create queue file before daemonizing to reliably block 'settle'

This commit is contained in:
Kay Sievers
2011-05-16 13:17:48 +02:00
parent df2ee940d8
commit 2738ec2cf7
+12 -10
View File
@@ -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);