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.
cpp
nirenjan 2022-07-27 11:33:44 -07:00
parent b0f9006594
commit d3d32cf278
3 changed files with 76 additions and 39 deletions

View File

@ -73,7 +73,7 @@ static void listen_signal(int signum, void (*handler)(int))
action.sa_handler = handler; action.sa_handler = handler;
sigemptyset(&action.sa_mask); sigemptyset(&action.sa_mask);
action.sa_flags = 0; action.sa_flags = SA_RESTART;
rc = sigaction(signum, &action, NULL); rc = sigaction(signum, &action, NULL);
if (rc < 0) { if (rc < 0) {
@ -261,6 +261,8 @@ int main(int argc, char **argv)
const char *command_sock = NULL; const char *command_sock = NULL;
int opt; int opt;
int command_sock_fd; int command_sock_fd;
int rc;
sigset_t sigblockset;
/* Initialize gettext */ /* Initialize gettext */
#if ENABLE_NLS #if ENABLE_NLS
@ -353,6 +355,14 @@ int main(int argc, char **argv)
set_log_file(foreground, log_file); set_log_file(foreground, log_file);
x52d_config_load(conf_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 // Start device threads
x52d_dev_init(); x52d_dev_init();
x52d_clock_init(); x52d_clock_init();
@ -362,6 +372,13 @@ int main(int argc, char **argv)
x52d_mouse_evdev_init(); x52d_mouse_evdev_init();
#endif #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); command_sock_fd = listen_command(command_sock);
if (command_sock_fd < 0) { if (command_sock_fd < 0) {
goto cleanup; goto cleanup;

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: libx52 0.2.3\n" "Project-Id-Version: libx52 0.2.3\n"
"Report-Msgid-Bugs-To: https://github.com/nirenjan/libx52/issues\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" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -542,68 +542,78 @@ msgstr ""
msgid "Error listening on command socket: %s" msgid "Error listening on command socket: %s"
msgstr "" msgstr ""
#: daemon/x52d_main.c:315 #: daemon/x52d_main.c:317
#, c-format #, c-format
msgid "Unable to parse configuration override '%s'\n" msgid "Unable to parse configuration override '%s'\n"
msgstr "" msgstr ""
#: daemon/x52d_main.c:343 #: daemon/x52d_main.c:345
#, c-format #, c-format
msgid "Foreground = %s" msgid "Foreground = %s"
msgstr "" msgstr ""
#: daemon/x52d_main.c:343 daemon/x52d_main.c:344 #: daemon/x52d_main.c:345 daemon/x52d_main.c:346
msgid "true" msgid "true"
msgstr "" msgstr ""
#: daemon/x52d_main.c:343 daemon/x52d_main.c:344 #: daemon/x52d_main.c:345 daemon/x52d_main.c:346
msgid "false" msgid "false"
msgstr "" 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 #: daemon/x52d_main.c:346
#, c-format #, c-format
msgid "Log file = %s" msgid "Quiet = %s"
msgstr "" msgstr ""
#: daemon/x52d_main.c:347 #: daemon/x52d_main.c:347
#, c-format #, c-format
msgid "Config file = %s" msgid "Verbosity = %d"
msgstr "" msgstr ""
#: daemon/x52d_main.c:348 #: daemon/x52d_main.c:348
#, c-format #, c-format
msgid "PID file = %s" msgid "Log file = %s"
msgstr "" msgstr ""
#: daemon/x52d_main.c:349 #: daemon/x52d_main.c:349
#, c-format #, 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" msgid "Command socket = %s"
msgstr "" 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" msgid "Reloading X52 configuration"
msgstr "" msgstr ""
#: daemon/x52d_main.c:386 #: daemon/x52d_main.c:403
msgid "Saving X52 configuration to disk" msgid "Saving X52 configuration to disk"
msgstr "" msgstr ""
#: daemon/x52d_main.c:392 #: daemon/x52d_main.c:409
#, c-format #, c-format
msgid "Received termination signal %s" msgid "Received termination signal %s"
msgstr "" msgstr ""
#: daemon/x52d_main.c:415 #: daemon/x52d_main.c:432
msgid "Shutting down X52 daemon" msgid "Shutting down X52 daemon"
msgstr "" msgstr ""

View File

@ -7,8 +7,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: libx52 0.2.3\n" "Project-Id-Version: libx52 0.2.3\n"
"Report-Msgid-Bugs-To: https://github.com/nirenjan/libx52/issues\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: 2022-06-05 08:51-0700\n" "PO-Revision-Date: 2022-07-27 11:32-0700\n"
"Last-Translator: Nirenjan Krishnan <nirenjan@gmail.com>\n" "Last-Translator: Nirenjan Krishnan <nirenjan@gmail.com>\n"
"Language-Team: Dummy Language for testing i18n\n" "Language-Team: Dummy Language for testing i18n\n"
"Language: xx_PL\n" "Language: xx_PL\n"
@ -589,68 +589,78 @@ msgstr "Erroray indingbay otay ommandcay ocketsay: %s"
msgid "Error listening on command socket: %s" msgid "Error listening on command socket: %s"
msgstr "Erroray isteninglay onay ommandcay ocketsay: %s" msgstr "Erroray isteninglay onay ommandcay ocketsay: %s"
#: daemon/x52d_main.c:315 #: daemon/x52d_main.c:317
#, c-format #, c-format
msgid "Unable to parse configuration override '%s'\n" msgid "Unable to parse configuration override '%s'\n"
msgstr "Unableay otay arsepay onfigurationcay overrideay '%s'\n" msgstr "Unableay otay arsepay onfigurationcay overrideay '%s'\n"
#: daemon/x52d_main.c:343 #: daemon/x52d_main.c:345
#, c-format #, c-format
msgid "Foreground = %s" msgid "Foreground = %s"
msgstr "Oregroundfay = %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" msgid "true"
msgstr "uetray" msgstr "uetray"
#: daemon/x52d_main.c:343 daemon/x52d_main.c:344 #: daemon/x52d_main.c:345 daemon/x52d_main.c:346
msgid "false" msgid "false"
msgstr "alsefay" msgstr "alsefay"
#: daemon/x52d_main.c:344 #: daemon/x52d_main.c:346
#, c-format #, c-format
msgid "Quiet = %s" msgid "Quiet = %s"
msgstr "Uietqay = %s" msgstr "Uietqay = %s"
#: daemon/x52d_main.c:345 #: daemon/x52d_main.c:347
#, c-format #, c-format
msgid "Verbosity = %d" msgid "Verbosity = %d"
msgstr "Erbosityvay = %d" msgstr "Erbosityvay = %d"
#: daemon/x52d_main.c:346 #: daemon/x52d_main.c:348
#, c-format #, c-format
msgid "Log file = %s" msgid "Log file = %s"
msgstr "Oglay ilefay = %s" msgstr "Oglay ilefay = %s"
#: daemon/x52d_main.c:347 #: daemon/x52d_main.c:349
#, c-format #, c-format
msgid "Config file = %s" msgid "Config file = %s"
msgstr "Onfigcay ilefay = %s" msgstr "Onfigcay ilefay = %s"
#: daemon/x52d_main.c:348 #: daemon/x52d_main.c:350
#, c-format #, c-format
msgid "PID file = %s" msgid "PID file = %s"
msgstr "IDPay ilefay = %s" msgstr "IDPay ilefay = %s"
#: daemon/x52d_main.c:349 #: daemon/x52d_main.c:351
#, c-format #, c-format
msgid "Command socket = %s" msgid "Command socket = %s"
msgstr "Ommandcay ocketsay = %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" msgid "Reloading X52 configuration"
msgstr "Eloadingray X52 onfigurationcay" msgstr "Eloadingray X52 onfigurationcay"
#: daemon/x52d_main.c:386 #: daemon/x52d_main.c:403
msgid "Saving X52 configuration to disk" msgid "Saving X52 configuration to disk"
msgstr "Avingsay X52 onfigurationcay otay iskday" msgstr "Avingsay X52 onfigurationcay otay iskday"
#: daemon/x52d_main.c:392 #: daemon/x52d_main.c:409
#, c-format #, c-format
msgid "Received termination signal %s" msgid "Received termination signal %s"
msgstr "Eceivedray erminationtay ignalsay %s" msgstr "Eceivedray erminationtay ignalsay %s"
#: daemon/x52d_main.c:415 #: daemon/x52d_main.c:432
msgid "Shutting down X52 daemon" msgid "Shutting down X52 daemon"
msgstr "Uttingshay ownday X52 aemonday" msgstr "Uttingshay ownday X52 aemonday"