chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Cleanup a little.
[elogind.git]
/
udev
/
udevd.c
diff --git
a/udev/udevd.c
b/udev/udevd.c
index d93781f411dfe07d73be21a629934078a810eaa2..27e64dae3acbb9a8a6d6f3388ac2842686b4e01e 100644
(file)
--- a/
udev/udevd.c
+++ b/
udev/udevd.c
@@
-215,6
+215,9
@@
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_clear(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);
@@
-226,6
+229,12
@@
static void event_fork(struct udev_event *event)
if (err == 0 && !event->ignore_device && udev_get_run(event->udev))
udev_event_execute_run(event);
if (err == 0 && !event->ignore_device && udev_get_run(event->udev))
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");
+ udev_watch_begin(event->udev, event->dev);
+
info(event->udev, "seq %llu exit with %i\n", udev_device_get_seqnum(event->dev), err);
logging_close();
if (err != 0)
info(event->udev, "seq %llu exit with %i\n", udev_device_get_seqnum(event->dev), err);
logging_close();
if (err != 0)
@@
-516,7
+525,6
@@
static int handle_inotify(struct udev *udev)
int nbytes, pos;
char *buf;
struct inotify_event *ev;
int nbytes, pos;
char *buf;
struct inotify_event *ev;
- int reload_config = 0;
if ((ioctl(inotify_fd, FIONREAD, &nbytes) < 0) || (nbytes <= 0))
return 0;
if ((ioctl(inotify_fd, FIONREAD, &nbytes) < 0) || (nbytes <= 0))
return 0;
@@
-543,7
+551,7
@@
static int handle_inotify(struct udev *udev)
char filename[UTIL_PATH_SIZE];
int fd;
char filename[UTIL_PATH_SIZE];
int fd;
- info(udev, "device %s closed, synthesising
write
\n", syspath);
+ info(udev, "device %s closed, synthesising
'change'
\n", syspath);
util_strlcpy(filename, syspath, sizeof(filename));
util_strlcat(filename, "/uevent", sizeof(filename));
fd = open(filename, O_WRONLY);
util_strlcpy(filename, syspath, sizeof(filename));
util_strlcat(filename, "/uevent", sizeof(filename));
fd = open(filename, O_WRONLY);
@@
-559,7
+567,7
@@
static int handle_inotify(struct udev *udev)
}
free (buf);
}
free (buf);
- return
reload_config
;
+ return
0
;
}
static void asmlinkage sig_handler(int signum)
}
static void asmlinkage sig_handler(int signum)
@@
-985,7
+993,7
@@
int main(int argc, char *argv[])
/* rules directory inotify watch */
if (inotify_poll && (inotify_poll->revents & POLLIN))
/* rules directory inotify watch */
if (inotify_poll && (inotify_poll->revents & POLLIN))
-
reload_config =
handle_inotify(udev);
+ handle_inotify(udev);
handle_signals:
signal_received = 0;
handle_signals:
signal_received = 0;