mirror of
https://github.com/fluencelabs/musl
synced 2025-06-28 14:11:56 +00:00
block all signals (even internal ones) in cancellation signal handler
previously the implementation-internal signal used for multithreaded set*id operations was left unblocked during handling of the cancellation signal. however, on some archs, signal contexts are huge (up to 5k) and the possibility of nested signal handlers drastically increases the minimum stack requirement. since the cancellation signal handler will do its job and return in bounded time before possibly passing execution to application code, there is no need to allow other signals to interrupt it.
This commit is contained in:
@ -1,3 +1,4 @@
|
|||||||
|
#include <string.h>
|
||||||
#include "pthread_impl.h"
|
#include "pthread_impl.h"
|
||||||
#include "syscall.h"
|
#include "syscall.h"
|
||||||
#include "libc.h"
|
#include "libc.h"
|
||||||
@ -80,7 +81,7 @@ static void init_cancellation()
|
|||||||
.sa_flags = SA_SIGINFO | SA_RESTART,
|
.sa_flags = SA_SIGINFO | SA_RESTART,
|
||||||
.sa_sigaction = cancel_handler
|
.sa_sigaction = cancel_handler
|
||||||
};
|
};
|
||||||
sigfillset(&sa.sa_mask);
|
memset(&sa.sa_mask, -1, _NSIG/8);
|
||||||
__libc_sigaction(SIGCANCEL, &sa, 0);
|
__libc_sigaction(SIGCANCEL, &sa, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user