File tree 2 files changed +28
-1
lines changed
2 files changed +28
-1
lines changed Original file line number Diff line number Diff line change @@ -118,6 +118,8 @@ class SignalWrap : public HandleWrap {
118
118
}
119
119
}
120
120
#endif
121
+ // Save the old signum
122
+ int old_signum = wrap->handle_ .signum ;
121
123
int err = uv_signal_start (
122
124
&wrap->handle_ ,
123
125
[](uv_signal_t * handle, int signum) {
@@ -131,7 +133,10 @@ class SignalWrap : public HandleWrap {
131
133
signum);
132
134
133
135
if (err == 0 ) {
134
- CHECK (!wrap->active_ );
136
+ // Subtract 1 if previously registered
137
+ if (wrap->active_ ) {
138
+ DecreaseSignalHandlerCount (old_signum);
139
+ }
135
140
wrap->active_ = true ;
136
141
Mutex::ScopedLock lock (handled_signals_mutex);
137
142
handled_signals[signum]++;
Original file line number Diff line number Diff line change
1
+ // Flags: --expose-internals
2
+ 'use strict' ;
3
+ const common = require ( '../common' ) ;
4
+ const { internalBinding } = require ( 'internal/test/binding' ) ;
5
+ const { signals } = internalBinding ( 'constants' ) . os ;
6
+ const Signal = internalBinding ( 'signal_wrap' ) . Signal ;
7
+
8
+ if ( ! common . isMainThread )
9
+ common . skip ( 'Signal handling in Workers is not supported' ) ;
10
+
11
+ const signal = new Signal ( ) ;
12
+ signal . start ( signals . SIGUSR2 ) ;
13
+ signal . onsignal = common . mustCall ( ( ) => {
14
+ process . nextTick ( ( ) => {
15
+ signal . start ( signals . SIGINT ) ;
16
+ signal . onsignal = common . mustCall ( ( ) => {
17
+ signal . close ( ) ;
18
+ } ) ;
19
+ process . kill ( 0 , signals . SIGINT ) ;
20
+ } ) ;
21
+ } ) ;
22
+ process . kill ( 0 , signals . SIGUSR2 ) ;
You can’t perform that action at this time.
0 commit comments