@@ -150,7 +150,35 @@ process::process (const char* cmd, const char* type)
150
150
goto cleanup_pipe;
151
151
}
152
152
153
- err_ = posix_spawnattr_setflags (&attr, POSIX_SPAWN_SETSIGDEF |
153
+ /* make sure that no signlas are masked in child process */
154
+ sigset_t sigmask_empty; sigemptyset (&sigmask_empty);
155
+ err_ = posix_spawnattr_setsigmask (&attr, &sigmask_empty);
156
+ if (err_)
157
+ {
158
+ WSREP_ERROR (" posix_spawnattr_setsigmask() failed: %d (%s)" ,
159
+ err_, strerror (err_));
160
+ goto cleanup_attr;
161
+ }
162
+
163
+ /* make sure the following signals are not ignored in child process */
164
+ sigset_t default_signals; sigemptyset (&default_signals);
165
+ sigaddset (&default_signals, SIGHUP);
166
+ sigaddset (&default_signals, SIGINT);
167
+ sigaddset (&default_signals, SIGQUIT);
168
+ sigaddset (&default_signals, SIGPIPE);
169
+ sigaddset (&default_signals, SIGTERM);
170
+ sigaddset (&default_signals, SIGCHLD);
171
+ err_ = posix_spawnattr_setsigdefault (&attr, &default_signals);
172
+ if (err_)
173
+ {
174
+ WSREP_ERROR (" posix_spawnattr_setsigdefault() failed: %d (%s)" ,
175
+ err_, strerror (err_));
176
+ goto cleanup_attr;
177
+ }
178
+
179
+ err_ = posix_spawnattr_setflags (&attr, POSIX_SPAWN_SETSIGDEF |
180
+ POSIX_SPAWN_SETSIGMASK |
181
+ /* start a new process group */ POSIX_SPAWN_SETPGROUP |
154
182
POSIX_SPAWN_USEVFORK);
155
183
if (err_)
156
184
{
0 commit comments