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 buf[UH_LIMIT_MSGHEAD];
|
||||||
char hdr[UH_LIMIT_MSGHEAD];
|
char hdr[UH_LIMIT_MSGHEAD];
|
||||||
|
|
||||||
|
pid_t child;
|
||||||
|
|
||||||
fd_set reader;
|
fd_set reader;
|
||||||
fd_set writer;
|
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 */
|
/* fork off child process */
|
||||||
switch( fork() )
|
switch( (child = fork()) )
|
||||||
{
|
{
|
||||||
/* oops */
|
/* oops */
|
||||||
case -1:
|
case -1:
|
||||||
|
@ -543,6 +545,9 @@ void uh_cgi_request(struct client *cl, struct http_request *req, struct path_inf
|
||||||
close(rfd[0]);
|
close(rfd[0]);
|
||||||
close(wfd[1]);
|
close(wfd[1]);
|
||||||
|
|
||||||
|
if( !kill(child, 0) )
|
||||||
|
kill(child, SIGTERM);
|
||||||
|
|
||||||
break;
|
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)
|
void uh_lua_request(struct client *cl, struct http_request *req, lua_State *L)
|
||||||
{
|
{
|
||||||
pid_t pid;
|
|
||||||
|
|
||||||
int i, data_sent;
|
int i, data_sent;
|
||||||
int content_length = 0;
|
int content_length = 0;
|
||||||
int buflen = 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];
|
char buf[UH_LIMIT_MSGHEAD];
|
||||||
|
|
||||||
|
pid_t child;
|
||||||
|
|
||||||
fd_set reader;
|
fd_set reader;
|
||||||
fd_set writer;
|
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:
|
case -1:
|
||||||
uh_http_sendhf(cl, 500, "Internal Server Error",
|
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(rfd[0]);
|
||||||
close(wfd[1]);
|
close(wfd[1]);
|
||||||
|
|
||||||
|
if( !kill(child, 0) )
|
||||||
|
kill(child, SIGTERM);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue