summaryrefslogtreecommitdiff
path: root/core/udev/01-settle.patch
diff options
context:
space:
mode:
Diffstat (limited to 'core/udev/01-settle.patch')
-rw-r--r--core/udev/01-settle.patch68
1 files changed, 68 insertions, 0 deletions
diff --git a/core/udev/01-settle.patch b/core/udev/01-settle.patch
new file mode 100644
index 000000000..88e23d2a2
--- /dev/null
+++ b/core/udev/01-settle.patch
@@ -0,0 +1,68 @@
+From 2738ec2cf721db0c0deac2ba0abdc73cf7739e9f Mon Sep 17 00:00:00 2001
+From: Kay Sievers <kay.sievers@vrfy.org>
+Date: Mon, 16 May 2011 13:17:48 +0200
+Subject: [PATCH 1/7] udevd: create queue file before daemonizing to reliably
+ block 'settle'
+
+---
+ udev/udevd.c | 22 ++++++++++++----------
+ 1 files changed, 12 insertions(+), 10 deletions(-)
+
+diff --git a/udev/udevd.c b/udev/udevd.c
+index be4b071..258d787 100644
+--- a/udev/udevd.c
++++ b/udev/udevd.c
+@@ -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);
+--
+1.7.5.1
+