@@ -2793,9 +2793,9 @@ static void AtExit() {
2793
2793
}
2794
2794
2795
2795
2796
- static void SignalExit (int signal ) {
2796
+ static void SignalExit (int signo ) {
2797
2797
uv_tty_reset_mode ();
2798
- _exit ( 128 + signal );
2798
+ raise (signo );
2799
2799
}
2800
2800
2801
2801
@@ -3131,12 +3131,15 @@ static void EnableDebugSignalHandler(int signo) {
3131
3131
}
3132
3132
3133
3133
3134
- static void RegisterSignalHandler (int signal, void (*handler)(int signal)) {
3134
+ static void RegisterSignalHandler (int signal,
3135
+ void (*handler)(int signal),
3136
+ bool reset_handler = false) {
3135
3137
struct sigaction sa;
3136
3138
memset (&sa, 0 , sizeof (sa));
3137
3139
sa.sa_handler = handler;
3140
+ sa.sa_flags = reset_handler ? SA_RESETHAND : 0 ;
3138
3141
sigfillset (&sa.sa_mask );
3139
- sigaction (signal , &sa, NULL );
3142
+ CHECK_EQ ( sigaction (signal , &sa, NULL ), 0 );
3140
3143
}
3141
3144
3142
3145
@@ -3423,8 +3426,8 @@ void Init(int* argc,
3423
3426
}
3424
3427
// Ignore SIGPIPE
3425
3428
RegisterSignalHandler (SIGPIPE, SIG_IGN);
3426
- RegisterSignalHandler (SIGINT, SignalExit);
3427
- RegisterSignalHandler (SIGTERM, SignalExit);
3429
+ RegisterSignalHandler (SIGINT, SignalExit, true );
3430
+ RegisterSignalHandler (SIGTERM, SignalExit, true );
3428
3431
#endif // __POSIX__
3429
3432
3430
3433
V8::SetFatalErrorHandler (node::OnFatalError);
0 commit comments