uhttpd: deliver SIGTERM to child when parent leaves I/O loop
This commit is contained in:
parent
d87fefbda6
commit
fa712a0bc9
2 changed files with 12 additions and 4 deletions
|
@ -150,6 +150,8 @@ void uh_cgi_request(struct client *cl, struct http_request *req, struct path_inf
|
|||
char buf[UH_LIMIT_MSGHEAD];
|
||||
char hdr[UH_LIMIT_MSGHEAD];
|
||||
|
||||
pid_t child;
|
||||
|
||||
fd_set reader;
|
||||
fd_set writer;
|
||||
|
||||
|
@ -172,7 +174,7 @@ void uh_cgi_request(struct client *cl, struct http_request *req, struct path_inf
|
|||
}
|
||||
|
||||
/* fork off child process */
|
||||
switch( fork() )
|
||||
switch( (child = fork()) )
|
||||
{
|
||||
/* oops */
|
||||
case -1:
|
||||
|
@ -543,6 +545,9 @@ void uh_cgi_request(struct client *cl, struct http_request *req, struct path_inf
|
|||
close(rfd[0]);
|
||||
close(wfd[1]);
|
||||
|
||||
if( !kill(child, 0) )
|
||||
kill(child, SIGTERM);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -211,8 +211,6 @@ lua_State * uh_lua_init(const char *handler)
|
|||
|
||||
void uh_lua_request(struct client *cl, struct http_request *req, lua_State *L)
|
||||
{
|
||||
pid_t pid;
|
||||
|
||||
int i, data_sent;
|
||||
int content_length = 0;
|
||||
int buflen = 0;
|
||||
|
@ -226,6 +224,8 @@ void uh_lua_request(struct client *cl, struct http_request *req, lua_State *L)
|
|||
|
||||
char buf[UH_LIMIT_MSGHEAD];
|
||||
|
||||
pid_t child;
|
||||
|
||||
fd_set reader;
|
||||
fd_set writer;
|
||||
|
||||
|
@ -247,7 +247,7 @@ void uh_lua_request(struct client *cl, struct http_request *req, lua_State *L)
|
|||
}
|
||||
|
||||
|
||||
switch( (pid = fork()) )
|
||||
switch( (child = fork()) )
|
||||
{
|
||||
case -1:
|
||||
uh_http_sendhf(cl, 500, "Internal Server Error",
|
||||
|
@ -519,6 +519,9 @@ void uh_lua_request(struct client *cl, struct http_request *req, lua_State *L)
|
|||
close(rfd[0]);
|
||||
close(wfd[1]);
|
||||
|
||||
if( !kill(child, 0) )
|
||||
kill(child, SIGTERM);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue