File tree 1 file changed +17
-1
lines changed
1 file changed +17
-1
lines changed Original file line number Diff line number Diff line change @@ -149,6 +149,11 @@ func mpreinit(mp *m) {
149
149
}
150
150
151
151
func msigsave (mp * m ) {
152
+ smask := (* uint32 )(unsafe .Pointer (& mp .sigmask ))
153
+ if unsafe .Sizeof (* smask ) > unsafe .Sizeof (mp .sigmask ) {
154
+ throw ("insufficient storage for signal mask" )
155
+ }
156
+ * smask = sigprocmask (_SIG_BLOCK , 0 )
152
157
}
153
158
154
159
// Called to initialize a new m (including the bootstrap m).
@@ -161,11 +166,22 @@ func minit() {
161
166
162
167
// Initialize signal handling
163
168
signalstack ((* byte )(unsafe .Pointer (_g_ .m .gsignal .stack .lo )), 32 * 1024 )
164
- sigprocmask (_SIG_SETMASK , sigset_none )
169
+
170
+ // restore signal mask from m.sigmask and unblock essential signals
171
+ nmask := * (* uint32 )(unsafe .Pointer (& _g_ .m .sigmask ))
172
+ for i := range sigtable {
173
+ if sigtable [i ].flags & _SigUnblock != 0 {
174
+ nmask &^= 1 << (uint32 (i ) - 1 )
175
+ }
176
+ }
177
+ sigprocmask (_SIG_SETMASK , nmask )
165
178
}
166
179
167
180
// Called from dropm to undo the effect of an minit.
168
181
func unminit () {
182
+ _g_ := getg ()
183
+ smask := * (* uint32 )(unsafe .Pointer (& _g_ .m .sigmask ))
184
+ sigprocmask (_SIG_SETMASK , smask )
169
185
signalstack (nil , 0 )
170
186
}
171
187
You can’t perform that action at this time.
0 commit comments