tree-wide: make sigprocmask() changes more automatic
This tries to get rid of most manual sigprocmask() changes, in favour of: 1. The SD_EVENT_SIGNAL_PROCMASK flag to sd_event_add_signal() 2. The sd_event_set_signal_exit() call for handling SIGTERM/SIGINT 3. Move masking of SIGWINCH into ptyfwd, out of nspawn/vmspawn/run And while we are at it get rid of a bunch of event source fields whose lifetime is bound to the sd_event object they belong to anyway, and make use of the "floating" event source feature of sd-event instead.
This commit is contained in:
@@ -682,9 +682,9 @@ int manager_new(Manager **ret) {
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
(void) sd_event_add_signal(m->event, NULL, SIGTERM, NULL, NULL);
|
||||
(void) sd_event_add_signal(m->event, NULL, SIGINT, NULL, NULL);
|
||||
(void) sd_event_add_signal(m->event, NULL, SIGHUP | SD_EVENT_SIGNAL_PROCMASK, manager_dispatch_reload_signal, m);
|
||||
r = sd_event_set_signal_exit(m->event, true);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
(void) sd_event_set_watchdog(m->event, true);
|
||||
|
||||
@@ -720,10 +720,25 @@ int manager_new(Manager **ret) {
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
(void) sd_event_add_signal(m->event, &m->sigusr1_event_source, SIGUSR1, manager_sigusr1, m);
|
||||
(void) sd_event_add_signal(m->event, &m->sigusr2_event_source, SIGUSR2, manager_sigusr2, m);
|
||||
(void) sd_event_add_signal(m->event, &m->sigrtmin1_event_source, SIGRTMIN+1, manager_sigrtmin1, m);
|
||||
(void) sd_event_add_signal(m->event, NULL, SIGRTMIN+18, sigrtmin18_handler, &m->sigrtmin18_info);
|
||||
r = sd_event_add_signal(m->event, /* ret_event_source= */ NULL, SIGHUP | SD_EVENT_SIGNAL_PROCMASK, manager_dispatch_reload_signal, m);
|
||||
if (r < 0)
|
||||
return log_debug_errno(r, "Failed install SIGHUP handler: %m");
|
||||
|
||||
r = sd_event_add_signal(m->event, /* ret_event_source= */ NULL, SIGUSR1 | SD_EVENT_SIGNAL_PROCMASK, manager_sigusr1, m);
|
||||
if (r < 0)
|
||||
return log_debug_errno(r, "Failed install SIGUSR1 handler: %m");
|
||||
|
||||
r = sd_event_add_signal(m->event, /* ret_event_source= */ NULL, SIGUSR2 | SD_EVENT_SIGNAL_PROCMASK, manager_sigusr2, m);
|
||||
if (r < 0)
|
||||
return log_debug_errno(r, "Failed install SIGUSR2 handler: %m");
|
||||
|
||||
r = sd_event_add_signal(m->event, /* ret_event_source= */ NULL, (SIGRTMIN+1) | SD_EVENT_SIGNAL_PROCMASK, manager_sigrtmin1, m);
|
||||
if (r < 0)
|
||||
return log_debug_errno(r, "Failed install SIGRTMIN+1 handler: %m");
|
||||
|
||||
r = sd_event_add_signal(m->event, /* ret_event_source= */ NULL, (SIGRTMIN+18) | SD_EVENT_SIGNAL_PROCMASK, sigrtmin18_handler, &m->sigrtmin18_info);
|
||||
if (r < 0)
|
||||
return log_debug_errno(r, "Failed install SIGRTMIN+18 handler: %m");
|
||||
|
||||
manager_cleanup_saved_user(m);
|
||||
|
||||
@@ -801,10 +816,6 @@ Manager *manager_free(Manager *m) {
|
||||
|
||||
sd_bus_flush_close_unref(m->bus);
|
||||
|
||||
sd_event_source_unref(m->sigusr1_event_source);
|
||||
sd_event_source_unref(m->sigusr2_event_source);
|
||||
sd_event_source_unref(m->sigrtmin1_event_source);
|
||||
|
||||
dns_resource_key_unref(m->llmnr_host_ipv4_key);
|
||||
dns_resource_key_unref(m->llmnr_host_ipv6_key);
|
||||
dns_resource_key_unref(m->mdns_host_ipv4_key);
|
||||
|
||||
@@ -123,10 +123,6 @@ struct Manager {
|
||||
int hostname_fd;
|
||||
sd_event_source *hostname_event_source;
|
||||
|
||||
sd_event_source *sigusr1_event_source;
|
||||
sd_event_source *sigusr2_event_source;
|
||||
sd_event_source *sigrtmin1_event_source;
|
||||
|
||||
unsigned n_transactions_total;
|
||||
unsigned n_timeouts_total;
|
||||
unsigned n_timeouts_served_stale_total;
|
||||
|
||||
@@ -67,8 +67,6 @@ static int run(int argc, char *argv[]) {
|
||||
return log_error_errno(r, "Failed to drop privileges: %m");
|
||||
}
|
||||
|
||||
assert_se(sigprocmask_many(SIG_BLOCK, NULL, SIGTERM, SIGINT, SIGUSR1, SIGUSR2, SIGRTMIN+1, SIGRTMIN+18) >= 0);
|
||||
|
||||
r = manager_new(&m);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Could not create manager: %m");
|
||||
|
||||
Reference in New Issue
Block a user