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;
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;

View File

@ -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 <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\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 ""

View File

@ -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 <nirenjan@gmail.com>\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"