summaryrefslogtreecommitdiff
path: root/core/udev/01-settle.patch
blob: 88e23d2a29088341d5b7762e3b0033f5a9fa960b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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