Download | Plain Text | Line Numbers


diff -Naur a/sapi/fpm/fpm/fpm_children.h b/sapi/fpm/fpm/fpm_children.h
--- a/sapi/fpm/fpm/fpm_children.h	2018-07-31 16:33:06.000000000 +0200
+++ b/sapi/fpm/fpm/fpm_children.h	2018-08-03 19:34:37.985592103 +0200
@@ -32,6 +32,7 @@
 	pid_t pid;
 	int scoreboard_i;
 	struct zlog_stream *log_stream;
+	int sigterm_sent;
 };
 
 #endif
diff -Naur a/sapi/fpm/fpm/fpm_process_ctl.c b/sapi/fpm/fpm/fpm_process_ctl.c
--- a/sapi/fpm/fpm/fpm_process_ctl.c	2018-07-31 16:33:06.000000000 +0200
+++ b/sapi/fpm/fpm/fpm_process_ctl.c	2018-08-03 19:34:37.985592103 +0200
@@ -52,6 +52,7 @@
 
 static void fpm_pctl_action(struct fpm_event_s *ev, short which, void *arg) /* {{{ */
 {
+	ev->flags &= ~FPM_EV_PERSIST;
 	fpm_pctl(FPM_PCTL_STATE_UNSPECIFIED, FPM_PCTL_ACTION_TIMEOUT);
 }
 /* }}} */
@@ -60,6 +61,7 @@
 {
 	fpm_event_set_timer(&pctl_event, 0, &fpm_pctl_action, NULL);
 	fpm_event_add(&pctl_event, sec * 1000);
+	pctl_event.flags |= FPM_EV_PERSIST;
 	return 0;
 }
 /* }}} */
@@ -135,6 +137,9 @@
 		case FPM_PCTL_QUIT :
 			s = SIGQUIT;
 			break;
+		case FPM_PCTL_KILL :
+			s = SIGKILL;
+			break;
 		default :
 			break;
 	}
diff -Naur a/sapi/fpm/fpm/fpm_process_ctl.h b/sapi/fpm/fpm/fpm_process_ctl.h
--- a/sapi/fpm/fpm/fpm_process_ctl.h	2018-07-31 16:33:05.000000000 +0200
+++ b/sapi/fpm/fpm/fpm_process_ctl.h	2018-08-03 19:34:37.986592093 +0200
@@ -45,7 +45,8 @@
 	FPM_PCTL_TERM,
 	FPM_PCTL_STOP,
 	FPM_PCTL_CONT,
-	FPM_PCTL_QUIT
+	FPM_PCTL_QUIT,
+	FPM_PCTL_KILL
 };
 
 #endif
diff -Naur a/sapi/fpm/fpm/fpm_request.c b/sapi/fpm/fpm/fpm_request.c
--- a/sapi/fpm/fpm/fpm_request.c	2018-07-31 16:33:05.000000000 +0200
+++ b/sapi/fpm/fpm/fpm_request.c	2018-08-03 19:34:37.986592093 +0200
@@ -272,7 +272,8 @@
 #endif
 		if (terminate_timeout && tv.tv_sec >= terminate_timeout) {
 			str_purify_filename(purified_script_filename, proc.script_filename, sizeof(proc.script_filename));
-			fpm_pctl_kill(child->pid, FPM_PCTL_TERM);
+			fpm_pctl_kill(child->pid, (child->sigterm_sent) ? FPM_PCTL_KILL : FPM_PCTL_TERM);
+			child->sigterm_sent = 1;
 
 			zlog(ZLOG_WARNING, "[pool %s] child %d, script '%s' (request: \"%s %s%s%s\") execution timed out (%d.%06d sec), terminating",
 				child->wp->config->name, (int) child->pid, purified_script_filename, proc.request_method, proc.request_uri,