diff --git a/core/init.c b/core/init.c index d8ef00daa..5eb7d8c4d 100644 --- a/core/init.c +++ b/core/init.c @@ -207,6 +207,8 @@ void uwsgi_init_default() { uwsgi.mule_msg_recv_size = 65536; uwsgi.harakiri_graceful_signal = SIGTERM; + + uwsgi.harakiri_only_graceful = 0; } void uwsgi_setup_reload() { diff --git a/core/master_utils.c b/core/master_utils.c index 22977c07b..6476d60b7 100644 --- a/core/master_utils.c +++ b/core/master_utils.c @@ -1681,9 +1681,12 @@ void trigger_harakiri(int i) { } else { kill(uwsgi.workers[i].pid, SIGKILL); } - if (!uwsgi.workers[i].pending_harakiri) + if (!uwsgi.workers[i].pending_harakiri) { uwsgi.workers[i].harakiri_count++; - uwsgi.workers[i].pending_harakiri++; + } + if (!uwsgi.harakiri_only_graceful) { + uwsgi.workers[i].pending_harakiri++; + } } } diff --git a/core/uwsgi.c b/core/uwsgi.c index 16137f6ed..ce504d3ec 100755 --- a/core/uwsgi.c +++ b/core/uwsgi.c @@ -62,6 +62,7 @@ static struct uwsgi_option uwsgi_base_options[] = { {"harakiri-verbose", no_argument, 0, "enable verbose mode for harakiri", uwsgi_opt_true, &uwsgi.harakiri_verbose, 0}, {"harakiri-graceful-timeout", required_argument, 0, "interval between graceful harakiri attempt and a sigkill", uwsgi_opt_set_int, &uwsgi.harakiri_graceful_timeout, 0}, {"harakiri-graceful-signal", required_argument, 0, "use this signal instead of sigterm for graceful harakiri attempts", uwsgi_opt_set_int, &uwsgi.harakiri_graceful_signal, 0}, + {"harakiri-only-graceful", required_argument, 0, "use only graceful harakiri", uwsgi_opt_true, &uwsgi.harakiri_only_graceful, 0}, {"harakiri-queue-threshold", required_argument, 0, "only trigger harakiri if queue is greater than this threshold", uwsgi_opt_set_int, &uwsgi.harakiri_queue_threshold, 0}, {"harakiri-no-arh", no_argument, 0, "do not enable harakiri during after-request-hook", uwsgi_opt_true, &uwsgi.harakiri_no_arh, 0}, {"no-harakiri-arh", no_argument, 0, "do not enable harakiri during after-request-hook", uwsgi_opt_true, &uwsgi.harakiri_no_arh, 0}, diff --git a/uwsgi.h b/uwsgi.h index 69f9fbf8a..6dd96acd6 100755 --- a/uwsgi.h +++ b/uwsgi.h @@ -2488,6 +2488,7 @@ struct uwsgi_server { int harakiri_verbose; int harakiri_graceful_timeout; int harakiri_graceful_signal; + int harakiri_only_graceful; int harakiri_queue_threshold; int harakiri_no_arh;