return;
log_set_max_level(manager->config.log_level);
- manager_kill_workers(manager, /* force = */ false);
+ manager_kill_workers(manager, SIGTERM);
}
void manager_set_trace(Manager *manager, bool enable) {
return;
log_set_max_level(manager->config.log_level);
- manager_kill_workers(manager, /* force = */ false);
+ manager_kill_workers(manager, SIGTERM);
}
static void manager_adjust_config(UdevConfig *config) {
}
if (changed)
- manager_kill_workers(manager, /* force = */ false);
+ manager_kill_workers(manager, SIGTERM);
}
int manager_load(Manager *manager, int argc, char *argv[]) {
WORKER_RUNNING,
WORKER_IDLE,
WORKER_KILLED,
- WORKER_KILLING,
} WorkerState;
typedef struct Worker {
return 0;
}
-void manager_kill_workers(Manager *manager, bool force) {
- Worker *worker;
-
+void manager_kill_workers(Manager *manager, int signo) {
assert(manager);
+ Worker *worker;
HASHMAP_FOREACH(worker, manager->workers) {
- if (worker->state == WORKER_KILLED)
- continue;
-
- if (worker->state == WORKER_RUNNING && !force) {
- worker->state = WORKER_KILLING;
- continue;
- }
-
worker->state = WORKER_KILLED;
- (void) pidref_kill(&worker->pidref, SIGTERM);
+ (void) pidref_kill(&worker->pidref, signo);
}
}
/* discard queued events and kill workers */
event_queue_cleanup(manager, EVENT_QUEUED);
- manager_kill_workers(manager, true);
+ manager_kill_workers(manager, SIGTERM);
}
void notify_ready(Manager *manager) {
flags |= manager_reload_config(manager);
if (FLAGS_SET(flags, UDEV_RELOAD_KILL_WORKERS))
- manager_kill_workers(manager, false);
+ manager_kill_workers(manager, SIGTERM);
udev_builtin_reload(flags);
event_free(worker->event);
/* Update the state of the worker. */
- if (worker->state == WORKER_KILLING) {
- worker->state = WORKER_KILLED;
- (void) pidref_kill(&worker->pidref, SIGTERM);
- } else if (worker->state != WORKER_KILLED)
+ if (worker->state != WORKER_KILLED)
worker->state = WORKER_IDLE;
return 0;