X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fudev%2Fudevd.c;h=819ea3bb22ad0198292c5ef05b779a0ebaa4aa05;hb=3d06f4183470d42361303086ed9dedd29c0ffc1b;hp=bc0696c0ee0447ed4ce0e7faf077f082752e5e62;hpb=1ea972174baba40dbc80c51cbfc4edc49764b59b;p=elogind.git diff --git a/src/udev/udevd.c b/src/udev/udevd.c index bc0696c0e..819ea3bb2 100644 --- a/src/udev/udevd.c +++ b/src/udev/udevd.c @@ -267,7 +267,7 @@ static void worker_new(struct event *event) struct udev_event *udev_event; struct worker_message msg; int fd_lock = -1; - int err; + int err = 0; log_debug("seq %llu running", udev_device_get_seqnum(dev)); udev_event = udev_event_new(dev); @@ -301,6 +301,7 @@ static void worker_new(struct event *event) if (fd_lock >= 0 && flock(fd_lock, LOCK_SH|LOCK_NB) < 0) { log_debug("Unable to flock(%s), skipping event handling: %m", udev_device_get_devnode(d)); err = -EWOULDBLOCK; + fd_lock = safe_close(fd_lock); goto skip; } } @@ -312,13 +313,12 @@ static void worker_new(struct event *event) udev_event_execute_run(udev_event, &sigmask_orig); /* apply/restore inotify watch */ - if (err == 0 && udev_event->inotify_watch) { + if (udev_event->inotify_watch) { udev_watch_begin(udev, dev); udev_device_update_db(dev); } - if (fd_lock >= 0) - close(fd_lock); + safe_close(fd_lock); /* send processed event back to libudev listeners */ udev_monitor_send_device(worker_monitor, NULL, dev); @@ -377,10 +377,8 @@ skip: } out: udev_device_unref(dev); - if (fd_signal >= 0) - close(fd_signal); - if (fd_ep >= 0) - close(fd_ep); + safe_close(fd_signal); + safe_close(fd_ep); close(fd_inotify); close(worker_watch[WRITE_END]); udev_rules_unref(rules);