From: Luiz Augusto von Dentz <luiz.von.dentz@xxxxxxxxx> This don't require setting up signalfd. --- src/main.c | 64 +++--------------------------------------------------- 1 file changed, 3 insertions(+), 61 deletions(-) diff --git a/src/main.c b/src/main.c index 7ab1349cc..67eb6ac59 100644 --- a/src/main.c +++ b/src/main.c @@ -497,24 +497,11 @@ static gboolean quit_eventloop(gpointer user_data) return FALSE; } -static gboolean signal_handler(GIOChannel *channel, GIOCondition cond, - gpointer user_data) +static void signal_callback(int signum, void *user_data) { static bool terminated = false; - struct signalfd_siginfo si; - ssize_t result; - int fd; - if (cond & (G_IO_NVAL | G_IO_ERR | G_IO_HUP)) - return FALSE; - - fd = g_io_channel_unix_get_fd(channel); - - result = read(fd, &si, sizeof(si)); - if (result != sizeof(si)) - return FALSE; - - switch (si.ssi_signo) { + switch (signum) { case SIGINT: case SIGTERM: if (!terminated) { @@ -532,46 +519,6 @@ static gboolean signal_handler(GIOChannel *channel, GIOCondition cond, __btd_toggle_debug(); break; } - - return TRUE; -} - -static guint setup_signalfd(void) -{ - GIOChannel *channel; - guint source; - sigset_t mask; - int fd; - - sigemptyset(&mask); - sigaddset(&mask, SIGINT); - sigaddset(&mask, SIGTERM); - sigaddset(&mask, SIGUSR2); - - if (sigprocmask(SIG_BLOCK, &mask, NULL) < 0) { - perror("Failed to set signal mask"); - return 0; - } - - fd = signalfd(-1, &mask, 0); - if (fd < 0) { - perror("Failed to create signal descriptor"); - return 0; - } - - channel = g_io_channel_unix_new(fd); - - g_io_channel_set_close_on_unref(channel, TRUE); - g_io_channel_set_encoding(channel, NULL, NULL); - g_io_channel_set_buffered(channel, FALSE); - - source = g_io_add_watch(channel, - G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL, - signal_handler, NULL); - - g_io_channel_unref(channel); - - return source; } static char *option_debug = NULL; @@ -682,7 +629,6 @@ int main(int argc, char *argv[]) uint16_t sdp_mtu = 0; uint32_t sdp_flags = 0; int gdbus_flags = 0; - guint signal; init_defaults(); @@ -711,8 +657,6 @@ int main(int argc, char *argv[]) mainloop_init(); - signal = setup_signalfd(); - __btd_log_init(option_debug, option_detach); g_log_set_handler("GLib", G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | @@ -781,12 +725,10 @@ int main(int argc, char *argv[]) mainloop_sd_notify("STATUS=Running"); mainloop_sd_notify("READY=1"); - mainloop_run(); + mainloop_run_with_signal(signal_callback, NULL); mainloop_sd_notify("STATUS=Quitting"); - g_source_remove(signal); - plugin_cleanup(); btd_profile_cleanup(); -- 2.17.2