]> err.no Git - systemd/commitdiff
udevd: exit - process events before signals in worker
authorSteve Langasek <steve.langasek@canonical.com>
Sat, 8 Oct 2011 09:14:09 +0000 (02:14 -0700)
committerKay Sievers <kay.sievers@vrfy.org>
Sat, 8 Oct 2011 13:02:38 +0000 (15:02 +0200)
When a worker receives both a signal and a udev event in the same epoll_wait
run, the event must be processed first because the udev parent considers the
event already dispatched.  If we process the signal first and exit, udevd
times out after 60 seconds waiting for a response from an already-dead
worker.

Ref: https://bugs.launchpad.net/bugs/818177
Signed-off-by: Steve Langasek <steve.langasek@canonical.com>
udev/udevd.c

index 77aec9d2ae7f530bdea8fe58c527983508c6b2cf..b65b53f7ed6bb568d6592d0bc9d0f249f39ebf13 100644 (file)
@@ -347,6 +347,7 @@ static void worker_new(struct event *event)
                                for (i = 0; i < fdcount; i++) {
                                        if (ev[i].data.fd == fd_monitor && ev[i].events & EPOLLIN) {
                                                dev = udev_monitor_receive_device(worker_monitor);
+                                               break;
                                        } else if (ev[i].data.fd == fd_signal && ev[i].events & EPOLLIN) {
                                                struct signalfd_siginfo fdsi;
                                                ssize_t size;