udev: call udev_watch_end() before udev_event_execute_rules()

No functional change, just refactoring.
This commit is contained in:
Yu Watanabe
2023-12-20 00:14:21 +09:00
parent d6fe382122
commit 0df87a4037
6 changed files with 9 additions and 21 deletions

View File

@@ -169,7 +169,7 @@ static int run(int argc, char *argv[]) {
}
}
udev_event_execute_rules(event, -1, 3 * USEC_PER_SEC, SIGKILL, NULL, rules);
udev_event_execute_rules(event, 3 * USEC_PER_SEC, SIGKILL, NULL, rules);
udev_event_execute_run(event, 3 * USEC_PER_SEC, SIGKILL);
return 0;

View File

@@ -14,7 +14,6 @@
#include "udev-node.h"
#include "udev-trace.h"
#include "udev-util.h"
#include "udev-watch.h"
#include "user-util.h"
UdevEvent *udev_event_new(sd_device *dev, usec_t exec_delay_usec, sd_netlink *rtnl, int log_level) {
@@ -278,7 +277,6 @@ static int update_devnode(UdevEvent *event) {
static int event_execute_rules_on_remove(
UdevEvent *event,
int inotify_fd,
usec_t timeout_usec,
int timeout_signal,
Hashmap *properties_list,
@@ -299,10 +297,6 @@ static int event_execute_rules_on_remove(
if (r < 0)
log_device_debug_errno(dev, r, "Failed to delete database under /run/udev/data/, ignoring: %m");
r = udev_watch_end(inotify_fd, dev);
if (r < 0)
log_device_warning_errno(dev, r, "Failed to remove inotify watch, ignoring: %m");
r = udev_rules_apply_to_event(rules, event, timeout_usec, timeout_signal, properties_list);
if (sd_device_get_devnum(dev, NULL) >= 0)
@@ -330,7 +324,6 @@ static int copy_all_tags(sd_device *d, sd_device *s) {
int udev_event_execute_rules(
UdevEvent *event,
int inotify_fd, /* This may be negative */
usec_t timeout_usec,
int timeout_signal,
Hashmap *properties_list,
@@ -348,12 +341,7 @@ int udev_event_execute_rules(
return log_device_error_errno(dev, r, "Failed to get ACTION: %m");
if (action == SD_DEVICE_REMOVE)
return event_execute_rules_on_remove(event, inotify_fd, timeout_usec, timeout_signal, properties_list, rules);
/* Disable watch during event processing. */
r = udev_watch_end(inotify_fd, dev);
if (r < 0)
log_device_warning_errno(dev, r, "Failed to remove inotify watch, ignoring: %m");
return event_execute_rules_on_remove(event, timeout_usec, timeout_signal, properties_list, rules);
r = device_clone_with_db(dev, &event->dev_db_clone);
if (r < 0)

View File

@@ -53,7 +53,6 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(UdevEvent*, udev_event_free);
int udev_event_execute_rules(
UdevEvent *event,
int inotify_fd,
usec_t timeout_usec,
int timeout_signal,
Hashmap *properties_list,

View File

@@ -232,12 +232,9 @@ int udev_watch_end(int inotify_fd, sd_device *dev) {
_cleanup_close_ int dirfd = -EBADF;
int wd, r;
assert(inotify_fd >= 0);
assert(dev);
/* This may be called by 'udevadm test'. In that case, inotify_fd is not initialized. */
if (inotify_fd < 0)
return 0;
if (sd_device_get_devname(dev, NULL) < 0)
return 0;

View File

@@ -194,10 +194,14 @@ static int worker_process_device(UdevWorker *worker, sd_device *dev) {
if (worker->blockdev_read_only)
(void) worker_mark_block_device_read_only(dev);
/* Disable watch during event processing. */
r = udev_watch_end(worker->inotify_fd, dev);
if (r < 0)
log_device_warning_errno(dev, r, "Failed to remove inotify watch, ignoring: %m");
/* apply rules, create node, symlinks */
r = udev_event_execute_rules(
udev_event,
worker->inotify_fd,
worker->timeout_usec,
worker->timeout_signal,
worker->properties,

View File

@@ -129,7 +129,7 @@ int test_main(int argc, char *argv[], void *userdata) {
assert_se(sigfillset(&mask) >= 0);
assert_se(sigprocmask(SIG_SETMASK, &mask, &sigmask_orig) >= 0);
udev_event_execute_rules(event, -1, 60 * USEC_PER_SEC, SIGKILL, NULL, rules);
udev_event_execute_rules(event, 60 * USEC_PER_SEC, SIGKILL, NULL, rules);
FOREACH_DEVICE_PROPERTY(dev, key, value)
printf("%s=%s\n", key, value);