case UDEV_CTRL_STOP_EXEC_QUEUE:
log_debug("Received udev control message (STOP_EXEC_QUEUE)");
manager->stop_exec_queue = true;
+ (void) manager_reset_kill_workers_timer(manager);
break;
case UDEV_CTRL_START_EXEC_QUEUE:
log_debug("Received udev control message (START_EXEC_QUEUE)");
void notify_ready(Manager *manager);
void manager_kill_workers(Manager *manager, int signo);
+int manager_reset_kill_workers_timer(Manager *manager);
bool devpath_conflict(const char *a, const char *b);
log_debug("Received %s()", method);
manager->stop_exec_queue = streq(method, "io.systemd.Udev.StopExecQueue");
+
+ /* In case that processing queued events will be stopped for a while, regardless if there exist
+ * queued events, enable the kill workers timer here unless it is already enabled. Note, it is not
+ * necessary to disable the timer when processing is restarted, as it will be anyway disabled in
+ * on_post() -> event_queue_start(). */
+ if (manager->stop_exec_queue)
+ (void) manager_reset_kill_workers_timer(manager);
+
return sd_varlink_reply(link, NULL);
}