@@ -477,13 +477,15 @@ void LoadEnvironment(Environment* env) {
477
477
USE (StartMainThreadExecution (env));
478
478
}
479
479
480
+ #ifdef __POSIX__
481
+ typedef void (*sigaction_cb)(int signo, siginfo_t * info, void * ucontext);
482
+ #endif
480
483
#if NODE_USE_V8_WASM_TRAP_HANDLER
481
- static std::atomic<void (*)(int signo, siginfo_t * info, void * ucontext)>
482
- previous_sigsegv_action;
484
+ static std::atomic<sigaction_cb> previous_sigsegv_action;
483
485
484
486
void TrapWebAssemblyOrContinue (int signo, siginfo_t * info, void * ucontext) {
485
487
if (!v8::TryHandleWebAssemblyTrapPosix (signo, info, ucontext)) {
486
- auto prev = previous_sigsegv_action.load ();
488
+ sigaction_cb prev = previous_sigsegv_action.load ();
487
489
if (prev != nullptr ) {
488
490
prev (signo, info, ucontext);
489
491
} else {
@@ -502,13 +504,13 @@ void TrapWebAssemblyOrContinue(int signo, siginfo_t* info, void* ucontext) {
502
504
503
505
#ifdef __POSIX__
504
506
void RegisterSignalHandler (int signal,
505
- void (*handler)(int signal,
506
- siginfo_t * info,
507
- void * ucontext),
507
+ sigaction_cb handler,
508
508
bool reset_handler) {
509
+ CHECK_NOT_NULL (handler);
509
510
#if NODE_USE_V8_WASM_TRAP_HANDLER
510
511
if (signal == SIGSEGV) {
511
512
CHECK (previous_sigsegv_action.is_lock_free ());
513
+ CHECK (!reset_handler);
512
514
previous_sigsegv_action.store (handler);
513
515
return ;
514
516
}
0 commit comments