overhaul cancellation to fix resource leaks and dangerous behavior with signals
[musl] / src / signal / sigsuspend.c
index 7ce526c..9ee7124 100644 (file)
@@ -1,7 +1,13 @@
 #include <signal.h>
 #include "syscall.h"
+#include "libc.h"
 
 int sigsuspend(const sigset_t *mask)
 {
-       return syscall2(__NR_rt_sigsuspend, (long)mask, SYSCALL_SIGSET_SIZE);
+       int ret;
+       CANCELPT_BEGIN;
+       ret = syscall(__NR_rt_sigsuspend, mask, 8);
+       if (ret<0) CANCELPT_TRY;
+       CANCELPT_END;
+       return ret;
 }