ref: 17f40e1f4a9a191984b24ead216309f0bd890ecf
parent: 2b768fac5b4bf58983c4873af9217a480f0e9df9
author: zamfofex <zamfofex@twdb.moe>
date: Fri Oct 25 22:41:23 EDT 2024
improve signal handling for 'lichess' CLI
--- a/tools/lichess.c
+++ b/tools/lichess.c
@@ -5,6 +5,7 @@
#include <stdlib.h>
#include <pthread.h>
#include <signal.h>
+#include <sys/wait.h>
#include <cjson/cJSON.h>
@@ -456,6 +457,15 @@
return username;
}
+static void moonfish_signal(int signal)
+{+ (void) signal;
+
+ for (;;) {+ if (waitpid(-1, NULL, WNOHANG) <= 0) break;
+ }
+}
+
int main(int argc, char **argv)
{static char *format = "<cmd> <args>...";
@@ -472,6 +482,7 @@
int command_count;
struct tls *tls;
char *username;
+ struct sigaction action;
command = moonfish_args(args, format, argc, argv);
command_count = argc - (command - argv);
@@ -490,7 +501,14 @@
}
}
- if (signal(SIGCHLD, SIG_IGN) == SIG_ERR) return 1;
+ action.sa_handler = &moonfish_signal;
+ sigemptyset(&action.sa_mask);
+ action.sa_flags = 0;
+
+ if (sigaction(SIGCHLD, &action, NULL)) {+ perror(argv[0]);
+ return 1;
+ }
tls = moonfish_connect(argv[0], args[0].value, args[1].value);
moonfish_request(argv[0], tls, args[0].value, "GET /api/stream/event", token, NULL, 0);
--
⑨