diff -r 057b8eba91b5 core/master.c
--- a/core/master.c     Tue Sep 04 19:18:38 2012 +0200
+++ b/core/master.c     Thu Sep 06 12:06:06 2012 +0200
@@ -1176,6 +1176,16 @@
                        }
 
                        if (uwsgi.idle > 0 && !uwsgi.cheap) {
+                               // first check if there are no busy workers
+                               int busy_workers = 0;
+                               for (i = 1; i <= uwsgi.numproc; i++) {
+                                       if (uwsgi.workers[i].cheaped == 0 && uwsgi.workers[i].pid > 0) {
+                                               if (uwsgi.workers[i].busy == 0) {
+                                                       busy_workers = 1;
+                                                       break;
+                                               }
+                               }
+
                                uwsgi.current_time = uwsgi_now();
                                if (!last_request_timecheck)
                                        last_request_timecheck = uwsgi.current_time;
@@ -1184,7 +1194,7 @@
                                        last_request_count = uwsgi.workers[0].requests;
                                }
                                // a bit of over-engeneering to avoid clock skews
-                               else if (last_request_timecheck < uwsgi.current_time && (uwsgi.current_time - last_request_timecheck > uwsgi.idle)) {
+                               else if (last_request_timecheck < uwsgi.current_time && (uwsgi.current_time - last_request_timecheck > uwsgi.idle) && !busy_workers) {
                                        uwsgi_log("workers have been inactive for more than %d seconds (%llu-%llu)\n", uwsgi.idle, (unsigned long long) uwsgi.current_time, (unsigned long long) last_request_timecheck);
                                        uwsgi.cheap = 1;
                                        if (uwsgi.die_on_idle) {

