ref: a358b6be9f633e4c95205f67bed0cbdf80ce7164
parent: c59890019f2b2822fd4fd02bade798d63a6d1e29
author: Sigrid Solveig Haflínudóttir <[email protected]>
date: Sun Dec 31 18:34:29 EST 2023
pthread signal handler
--- a/sys_unix.c
+++ b/sys_unix.c
@@ -4,6 +4,7 @@
#include <errno.h>
#include <fenv.h>
#include <signal.h>
+#include <pthread.h>
char *game;
int debug;
@@ -113,6 +114,18 @@
exit(0);
}
+static void *
+sighandler(void *ss)
+{
+ int s;
+
+ for(;;){
+ if(sigwait(ss, &s) != 0)
+ break;
+ }
+ return nil;
+}
+
int
main(int argc, char **argv)
{
@@ -124,7 +137,14 @@
nil,
nil,
};
+ sigset_t ss;
+ pthread_t tid;
+ sigemptyset(&ss);
+ sigaddset(&ss, SIGPIPE);
+ pthread_sigmask(SIG_BLOCK, &ss, NULL);
+ pthread_create(&tid, nil, sighandler, &ss);
+
parg_init(&ps);
nargs = 0;
while((c = parg_getopt(&ps, argc, argv, "Ddg:N:")) >= 0){
@@ -161,8 +181,6 @@
}
srand(nanosec() + time(nil));
-
- signal(SIGPIPE, SIG_IGN);
paths[1] = strdup(va("%s/.quake", getenv("HOME")));
Host_Init(nargs, argv, paths);