diff options
author | root <root@rshg047.dnsready.net> | 2011-05-18 22:46:11 +0000 |
---|---|---|
committer | root <root@rshg047.dnsready.net> | 2011-05-18 22:46:11 +0000 |
commit | 82b609ecce972e236c2ce887ecd55ec30e2874a7 (patch) | |
tree | 0f538ac08e2ce61505f47f42534a969f42863767 /core/udev/01-settle.patch | |
parent | 4a67ab8a761f1d0ef59988a513f9f2163f94a869 (diff) |
Wed May 18 22:46:11 UTC 2011
Diffstat (limited to 'core/udev/01-settle.patch')
-rw-r--r-- | core/udev/01-settle.patch | 68 |
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 + |