From a8389097c0cd91720424b25ee5c6825b4f69cb6a Mon Sep 17 00:00:00 2001 From: Tom Gundersen Date: Tue, 12 May 2015 16:51:31 +0200 Subject: [PATCH] udevd: explicitly read out uevents we create ourselves Rather than skippling ctrl handling whenever we have handlede inotify events (and hence may have synthesized a 'change' event), just call the uevent handling explicitly from on_inotify() so that the event queue is up-to-date. --- src/udev/udevd.c | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/src/udev/udevd.c b/src/udev/udevd.c index 65f4fe6a457..8528f7147b5 100644 --- a/src/udev/udevd.c +++ b/src/udev/udevd.c @@ -910,9 +910,16 @@ static int on_inotify(sd_event_source *s, int fd, uint32_t revents, void *userda continue; log_debug("inotify event: %x for %s", e->mask, udev_device_get_devnode(dev)); - if (e->mask & IN_CLOSE_WRITE) + if (e->mask & IN_CLOSE_WRITE) { synthesize_change(dev); - else if (e->mask & IN_IGNORED) + + /* settle might be waiting on us to determine the queue + * state. If we just handled an inotify event, we might have + * generated a "change" event, but we won't have queued up + * the resultant uevent yet. Do that. + */ + on_uevent(NULL, -1, 0, monitor); + } else if (e->mask & IN_IGNORED) udev_watch_end(udev, dev); } @@ -1565,22 +1572,9 @@ int main(int argc, char *argv[]) { continue; /* device node watch */ - if (is_inotify) { + if (is_inotify) on_inotify(NULL, fd_inotify, 0, udev); - /* - * settle might be waiting on us to determine the queue - * state. If we just handled an inotify event, we might have - * generated a "change" event, but we won't have queued up - * the resultant uevent yet. - * - * Before we go ahead and potentially tell settle that the - * queue is empty, lets loop one more time to update the - * queue state again before deciding. - */ - continue; - } - /* tell settle that we are busy or idle, this needs to be before the * PING handling */