]> git.ipfire.org Git - thirdparty/systemd.git/blobdiff - src/udev/udev-worker.c
Merge pull request #30591 from yuwata/device-util
[thirdparty/systemd.git] / src / udev / udev-worker.c
index d9a525f4bd420eb1b7b95a36bb3af483477bb798..63a93e53dc6d96890c60dcacc431c08420d266b6 100644 (file)
@@ -172,7 +172,7 @@ static int worker_process_device(UdevWorker *worker, sd_device *dev) {
 
         log_device_uevent(dev, "Processing device");
 
-        udev_event = udev_event_new(dev, worker->exec_delay_usec, worker->rtnl, worker->log_level);
+        udev_event = udev_event_new(dev, worker);
         if (!udev_event)
                 return -ENOMEM;
 
@@ -190,18 +190,17 @@ 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,
-                          worker->rules);
+        r = udev_event_execute_rules(udev_event, worker->rules);
         if (r < 0)
                 return r;
 
-        udev_event_execute_run(udev_event, worker->timeout_usec, worker->timeout_signal);
+        udev_event_execute_run(udev_event);
 
         if (!worker->rtnl)
                 /* in case rtnl was initialized */
@@ -314,8 +313,6 @@ int udev_worker_main(UdevWorker *worker, sd_device *dev) {
 
         DEVICE_TRACE_POINT(worker_spawned, dev, getpid_cached());
 
-        assert_se(sigprocmask_many(SIG_BLOCK, NULL, SIGTERM, -1) >= 0);
-
         /* Reset OOM score, we only protect the main daemon. */
         r = set_oom_score_adjust(0);
         if (r < 0)
@@ -325,7 +322,7 @@ int udev_worker_main(UdevWorker *worker, sd_device *dev) {
         if (r < 0)
                 return log_error_errno(r, "Failed to allocate event loop: %m");
 
-        r = sd_event_add_signal(worker->event, NULL, SIGTERM, NULL, NULL);
+        r = sd_event_add_signal(worker->event, NULL, SIGTERM | SD_EVENT_SIGNAL_PROCMASK, NULL, NULL);
         if (r < 0)
                 return log_error_errno(r, "Failed to set SIGTERM event: %m");