summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/udev/udevd.c26
1 files changed, 10 insertions, 16 deletions
diff --git a/src/udev/udevd.c b/src/udev/udevd.c
index 65f4fe6a45..8528f7147b 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
*/