chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
use the event udev_device to disable the watch on "remove"
[elogind.git]
/
udev
/
udevd.c
diff --git
a/udev/udevd.c
b/udev/udevd.c
index 5fb6d5f7345e2fc38425fb4b6b70e0a2cadbb1e5..ee3d6f50338600db3608ce4d49a8408bc62b3c19 100644
(file)
--- a/
udev/udevd.c
+++ b/
udev/udevd.c
@@
-215,9
+215,6
@@
static void event_fork(struct udev_event *event)
/* set timeout to prevent hanging processes */
alarm(UDEV_EVENT_TIMEOUT);
/* set timeout to prevent hanging processes */
alarm(UDEV_EVENT_TIMEOUT);
- /* clear any existing udev watch on the node */
- udev_watch_end(event->udev, event->dev);
-
/* apply rules, create node, symlinks */
err = udev_event_execute_rules(event, rules);
/* apply rules, create node, symlinks */
err = udev_event_execute_rules(event, rules);
@@
-230,10
+227,10
@@
static void event_fork(struct udev_event *event)
udev_event_execute_run(event);
/* apply/restore inotify watch */
udev_event_execute_run(event);
/* apply/restore inotify watch */
- if (err == 0 && event->inotify_watch &&
- strcmp(udev_device_get_action(event->dev), "remove") != 0)
- info(event->udev, "device will be watched for changes\n");
+ if (err == 0 && event->inotify_watch) {
udev_watch_begin(event->udev, event->dev);
udev_watch_begin(event->udev, event->dev);
+ udev_device_update_db(event->dev);
+ }
info(event->udev, "seq %llu exit with %i\n", udev_device_get_seqnum(event->dev), err);
logging_close();
info(event->udev, "seq %llu exit with %i\n", udev_device_get_seqnum(event->dev), err);
logging_close();
@@
-539,10
+536,16
@@
static int handle_inotify(struct udev *udev)
read(inotify_fd, buf, nbytes);
read(inotify_fd, buf, nbytes);
- for (pos = 0
, ev = (struct inotify_event *)(buf + pos)
; pos < nbytes; pos += sizeof(struct inotify_event) + ev->len) {
+ for (pos = 0; pos < nbytes; pos += sizeof(struct inotify_event) + ev->len) {
struct udev_device *dev;
struct udev_device *dev;
- dbg(udev, "inotify event: %x for %d (%s)\n", ev->mask, ev->wd, ev->len ? ev->name : "*");
+ ev = (struct inotify_event *)(buf + pos);
+ if (ev->len) {
+ dbg(udev, "inotify event: %x for %s\n", ev->mask, ev->name);
+ reload_config = 1;
+ continue;
+ }
+
dev = udev_watch_lookup(udev, ev->wd);
if (dev != NULL) {
dbg(udev, "inotify event: %x for %s\n", ev->mask, udev_device_get_devnode(dev));
dev = udev_watch_lookup(udev, ev->wd);
if (dev != NULL) {
dbg(udev, "inotify event: %x for %s\n", ev->mask, udev_device_get_devnode(dev));
@@
-562,9
+565,8
@@
static int handle_inotify(struct udev *udev)
udev_watch_end(udev, dev);
udev_device_unref(dev);
udev_watch_end(udev, dev);
udev_device_unref(dev);
- } else {
- reload_config = 1;
}
}
+
}
free (buf);
}
free (buf);