chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
df2ee94
)
udevd: create queue file before daemonizing to reliably block 'settle'
author
Kay Sievers
<kay.sievers@vrfy.org>
Mon, 16 May 2011 11:17:48 +0000
(13:17 +0200)
committer
Kay Sievers
<kay.sievers@vrfy.org>
Mon, 16 May 2011 11:17:48 +0000
(13:17 +0200)
udev/udevd.c
patch
|
blob
|
history
diff --git
a/udev/udevd.c
b/udev/udevd.c
index be4b071ebb0fcd8bce27652f61917d08c3abdb26..258d7870ebf84f11cf89105296b21f2479fe928e 100644
(file)
--- 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);
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;
if (daemonize) {
pid_t pid;
int fd;
@@
-1421,8
+1428,8
@@
int main(int argc, char *argv[])
rc = 4;
goto exit;
default:
rc = 4;
goto exit;
default:
- rc =
0
;
- goto exit;
+ rc =
EXIT_SUCCESS
;
+ goto exit
_keep_queue
;
}
setsid();
}
setsid();
@@
-1521,12
+1528,6
@@
int main(int argc, char *argv[])
goto exit;
}
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;
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:
exit:
+ udev_queue_export_cleanup(udev_queue_export);
+exit_keep_queue:
if (fd_ep >= 0)
close(fd_ep);
worker_list_cleanup(udev);
if (fd_ep >= 0)
close(fd_ep);
worker_list_cleanup(udev);