From d3d32cf278cbabe70e0ef95baf8137d5a63ca7b5 Mon Sep 17 00:00:00 2001 From: nirenjan Date: Wed, 27 Jul 2022 11:33:44 -0700 Subject: [PATCH] Block signals on child threads This change adds logic to block signals on child threads. This is done so that we can migrate signal handling to the main thread, even if we add additional threads in the future. --- daemon/x52d_main.c | 19 +++++++++++++++- po/libx52.pot | 54 +++++++++++++++++++++++++++------------------- po/xx_PL.po | 42 ++++++++++++++++++++++-------------- 3 files changed, 76 insertions(+), 39 deletions(-) diff --git a/daemon/x52d_main.c b/daemon/x52d_main.c index 128dbd0..497d721 100644 --- a/daemon/x52d_main.c +++ b/daemon/x52d_main.c @@ -73,7 +73,7 @@ static void listen_signal(int signum, void (*handler)(int)) action.sa_handler = handler; sigemptyset(&action.sa_mask); - action.sa_flags = 0; + action.sa_flags = SA_RESTART; rc = sigaction(signum, &action, NULL); if (rc < 0) { @@ -261,6 +261,8 @@ int main(int argc, char **argv) const char *command_sock = NULL; int opt; int command_sock_fd; + int rc; + sigset_t sigblockset; /* Initialize gettext */ #if ENABLE_NLS @@ -353,6 +355,14 @@ int main(int argc, char **argv) set_log_file(foreground, log_file); x52d_config_load(conf_file); + // Disable pthread signals + sigfillset(&sigblockset); + rc = pthread_sigmask(SIG_BLOCK, &sigblockset, NULL); + if (rc != 0) { + PINELOG_FATAL(_("Error %d blocking signals on child threads: %s"), + errno, strerror(errno)); + } + // Start device threads x52d_dev_init(); x52d_clock_init(); @@ -362,6 +372,13 @@ int main(int argc, char **argv) x52d_mouse_evdev_init(); #endif + // Re-enable signals + rc = pthread_sigmask(SIG_UNBLOCK, &sigblockset, NULL); + if (rc != 0) { + PINELOG_FATAL(_("Error %d unblocking signals on child threads: %s"), + errno, strerror(errno)); + } + command_sock_fd = listen_command(command_sock); if (command_sock_fd < 0) { goto cleanup; diff --git a/po/libx52.pot b/po/libx52.pot index b2ec05d..2b280c2 100644 --- a/po/libx52.pot +++ b/po/libx52.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: libx52 0.2.3\n" "Report-Msgid-Bugs-To: https://github.com/nirenjan/libx52/issues\n" -"POT-Creation-Date: 2022-06-05 08:22-0700\n" +"POT-Creation-Date: 2022-07-27 11:30-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -542,68 +542,78 @@ msgstr "" msgid "Error listening on command socket: %s" msgstr "" -#: daemon/x52d_main.c:315 +#: daemon/x52d_main.c:317 #, c-format msgid "Unable to parse configuration override '%s'\n" msgstr "" -#: daemon/x52d_main.c:343 +#: daemon/x52d_main.c:345 #, c-format msgid "Foreground = %s" msgstr "" -#: daemon/x52d_main.c:343 daemon/x52d_main.c:344 +#: daemon/x52d_main.c:345 daemon/x52d_main.c:346 msgid "true" msgstr "" -#: daemon/x52d_main.c:343 daemon/x52d_main.c:344 +#: daemon/x52d_main.c:345 daemon/x52d_main.c:346 msgid "false" msgstr "" -#: daemon/x52d_main.c:344 -#, c-format -msgid "Quiet = %s" -msgstr "" - -#: daemon/x52d_main.c:345 -#, c-format -msgid "Verbosity = %d" -msgstr "" - #: daemon/x52d_main.c:346 #, c-format -msgid "Log file = %s" +msgid "Quiet = %s" msgstr "" #: daemon/x52d_main.c:347 #, c-format -msgid "Config file = %s" +msgid "Verbosity = %d" msgstr "" #: daemon/x52d_main.c:348 #, c-format -msgid "PID file = %s" +msgid "Log file = %s" msgstr "" #: daemon/x52d_main.c:349 #, c-format +msgid "Config file = %s" +msgstr "" + +#: daemon/x52d_main.c:350 +#, c-format +msgid "PID file = %s" +msgstr "" + +#: daemon/x52d_main.c:351 +#, c-format msgid "Command socket = %s" msgstr "" -#: daemon/x52d_main.c:379 +#: daemon/x52d_main.c:362 +#, c-format +msgid "Error %d blocking signals on child threads: %s" +msgstr "" + +#: daemon/x52d_main.c:378 +#, c-format +msgid "Error %d unblocking signals on child threads: %s" +msgstr "" + +#: daemon/x52d_main.c:396 msgid "Reloading X52 configuration" msgstr "" -#: daemon/x52d_main.c:386 +#: daemon/x52d_main.c:403 msgid "Saving X52 configuration to disk" msgstr "" -#: daemon/x52d_main.c:392 +#: daemon/x52d_main.c:409 #, c-format msgid "Received termination signal %s" msgstr "" -#: daemon/x52d_main.c:415 +#: daemon/x52d_main.c:432 msgid "Shutting down X52 daemon" msgstr "" diff --git a/po/xx_PL.po b/po/xx_PL.po index f055275..f44b628 100644 --- a/po/xx_PL.po +++ b/po/xx_PL.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: libx52 0.2.3\n" "Report-Msgid-Bugs-To: https://github.com/nirenjan/libx52/issues\n" -"POT-Creation-Date: 2022-06-05 08:22-0700\n" -"PO-Revision-Date: 2022-06-05 08:51-0700\n" +"POT-Creation-Date: 2022-07-27 11:30-0700\n" +"PO-Revision-Date: 2022-07-27 11:32-0700\n" "Last-Translator: Nirenjan Krishnan \n" "Language-Team: Dummy Language for testing i18n\n" "Language: xx_PL\n" @@ -589,68 +589,78 @@ msgstr "Erroray indingbay otay ommandcay ocketsay: %s" msgid "Error listening on command socket: %s" msgstr "Erroray isteninglay onay ommandcay ocketsay: %s" -#: daemon/x52d_main.c:315 +#: daemon/x52d_main.c:317 #, c-format msgid "Unable to parse configuration override '%s'\n" msgstr "Unableay otay arsepay onfigurationcay overrideay '%s'\n" -#: daemon/x52d_main.c:343 +#: daemon/x52d_main.c:345 #, c-format msgid "Foreground = %s" msgstr "Oregroundfay = %s" -#: daemon/x52d_main.c:343 daemon/x52d_main.c:344 +#: daemon/x52d_main.c:345 daemon/x52d_main.c:346 msgid "true" msgstr "uetray" -#: daemon/x52d_main.c:343 daemon/x52d_main.c:344 +#: daemon/x52d_main.c:345 daemon/x52d_main.c:346 msgid "false" msgstr "alsefay" -#: daemon/x52d_main.c:344 +#: daemon/x52d_main.c:346 #, c-format msgid "Quiet = %s" msgstr "Uietqay = %s" -#: daemon/x52d_main.c:345 +#: daemon/x52d_main.c:347 #, c-format msgid "Verbosity = %d" msgstr "Erbosityvay = %d" -#: daemon/x52d_main.c:346 +#: daemon/x52d_main.c:348 #, c-format msgid "Log file = %s" msgstr "Oglay ilefay = %s" -#: daemon/x52d_main.c:347 +#: daemon/x52d_main.c:349 #, c-format msgid "Config file = %s" msgstr "Onfigcay ilefay = %s" -#: daemon/x52d_main.c:348 +#: daemon/x52d_main.c:350 #, c-format msgid "PID file = %s" msgstr "IDPay ilefay = %s" -#: daemon/x52d_main.c:349 +#: daemon/x52d_main.c:351 #, c-format msgid "Command socket = %s" msgstr "Ommandcay ocketsay = %s" -#: daemon/x52d_main.c:379 +#: daemon/x52d_main.c:362 +#, c-format +msgid "Error %d blocking signals on child threads: %s" +msgstr "Erroray %d ockingblay ignalssay onay ildchay eadsthray: %s" + +#: daemon/x52d_main.c:378 +#, c-format +msgid "Error %d unblocking signals on child threads: %s" +msgstr "Erroray %d unblockingay ignalssay onay ildchay eadsthray: %s" + +#: daemon/x52d_main.c:396 msgid "Reloading X52 configuration" msgstr "Eloadingray X52 onfigurationcay" -#: daemon/x52d_main.c:386 +#: daemon/x52d_main.c:403 msgid "Saving X52 configuration to disk" msgstr "Avingsay X52 onfigurationcay otay iskday" -#: daemon/x52d_main.c:392 +#: daemon/x52d_main.c:409 #, c-format msgid "Received termination signal %s" msgstr "Eceivedray erminationtay ignalsay %s" -#: daemon/x52d_main.c:415 +#: daemon/x52d_main.c:432 msgid "Shutting down X52 daemon" msgstr "Uttingshay ownday X52 aemonday"