Skip to content

Commit aba20d0

Browse files
committed
feature: added an FFI API for setting the SA_RESTART flag on given
signals.
1 parent 91a0ad2 commit aba20d0

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

src/ngx_http_lua_worker.c

+42
Original file line numberDiff line numberDiff line change
@@ -190,4 +190,46 @@ ngx_http_lua_ffi_process_signal_graceful_exit(void)
190190
{
191191
ngx_quit = 1;
192192
}
193+
194+
195+
int
196+
ngx_http_lua_ffi_enable_sa_restart(int signum, int enabled, u_char *err,
197+
size_t *errlen)
198+
{
199+
#if !(NGX_WIN32)
200+
struct sigaction act;
201+
202+
if (ngx_process != NGX_PROCESS_WORKER
203+
&& ngx_process != NGX_PROCESS_SINGLE)
204+
{
205+
*errlen = ngx_snprintf(err, *errlen, "must be called from worker"
206+
" process")
207+
- err;
208+
return NGX_ERROR;
209+
}
210+
211+
if (sigaction(signum, NULL, &act) != 0) {
212+
*errlen = ngx_snprintf(err, *errlen, "failed to get sigaction for "
213+
" signal %d (%s)", strerror(errno))
214+
- err;
215+
return NGX_ERROR;
216+
}
217+
218+
if (enabled) {
219+
act.sa_flags |= SA_RESTART;
220+
221+
} else {
222+
act.sa_flags &= ~SA_RESTART;
223+
}
224+
225+
if (sigaction(signum, &act, NULL) != 0) {
226+
*errlen = ngx_snprintf(err, *errlen, "failed to set SA_RESTART for "
227+
" signal %d (%s)", strerror(errno))
228+
- err;
229+
return NGX_ERROR;
230+
}
231+
#endif
232+
233+
return NGX_OK;
234+
}
193235
#endif

0 commit comments

Comments
 (0)