shithub: moonfish

Download patch

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