From 313fe201470250c8e3d6a0281989c6bbab1d51db Mon Sep 17 00:00:00 2001
From: xiaost <xiaost7@gmail.com>
Date: Fri, 6 Dec 2013 14:19:30 +0800
Subject: [PATCH] [core] delay gracefully_kill

---
 core/uwsgi.c |   15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/core/uwsgi.c b/core/uwsgi.c
index 653e6ff..f32e368 100644
--- a/core/uwsgi.c
+++ b/core/uwsgi.c
@@ -822,6 +822,21 @@ end:
 
 void gracefully_kill(int signum) {
 
+	if (uwsgi.lazy && uwsgi.workers[uwsgi.mywid].manage_next_request == 1) {
+		int delay_gracefully_kill;
+		uwsgi.workers[uwsgi.mywid].manage_next_request = 2;
+		uwsgi_unix_signal(SIGALRM, gracefully_kill);
+		if (uwsgi.reload_mercy > 1) {
+			delay_gracefully_kill = 1 + (uwsgi.mywid % (uwsgi.reload_mercy / 2));
+		} else {
+			delay_gracefully_kill = 1 + (uwsgi.mywid % 30);
+		}
+		alarm(delay_gracefully_kill);
+		uwsgi_log("delay gracefully kill worker %d (pid: %d) in %d seconds...\n", 
+				uwsgi.mywid, uwsgi.mypid, delay_gracefully_kill);
+		return;
+	}
+
 	uwsgi_log("Gracefully killing worker %d (pid: %d)...\n", uwsgi.mywid, uwsgi.mypid);
 	uwsgi.workers[uwsgi.mywid].manage_next_request = 0;
 #ifdef UWSGI_THREADING
-- 
1.7.10.4

