]> git.kaiwu.me - nginx.git/commitdiff
Access log: cancel the flush timer on graceful shutdown.
authorValentin Bartenev <vbart@nginx.com>
Mon, 25 Aug 2014 09:41:31 +0000 (13:41 +0400)
committerValentin Bartenev <vbart@nginx.com>
Mon, 25 Aug 2014 09:41:31 +0000 (13:41 +0400)
Previously, it could prevent a worker process from exiting
for up to the configured flush timeout.

src/http/modules/ngx_http_log_module.c

index cec77e749508af5f0b4d27f79cc0c6f77dfbc084..04aa27fdaa7737fd9bee269c580cb67a07dee7a7 100644 (file)
@@ -744,10 +744,23 @@ ngx_http_log_flush(ngx_open_file_t *file, ngx_log_t *log)
 static void
 ngx_http_log_flush_handler(ngx_event_t *ev)
 {
+    ngx_open_file_t     *file;
+    ngx_http_log_buf_t  *buffer;
+
     ngx_log_debug0(NGX_LOG_DEBUG_EVENT, ev->log, 0,
                    "http log buffer flush handler");
 
-    ngx_http_log_flush(ev->data, ev->log);
+    if (ev->timedout) {
+        ngx_http_log_flush(ev->data, ev->log);
+        return;
+    }
+
+    /* cancel the flush timer for graceful shutdown */
+
+    file = ev->data;
+    buffer = file->data;
+
+    buffer->event = NULL;
 }
 
 
@@ -1411,6 +1424,7 @@ process_formats:
             buffer->event->data = log->file;
             buffer->event->handler = ngx_http_log_flush_handler;
             buffer->event->log = &cf->cycle->new_log;
+            buffer->event->cancelable = 1;
 
             buffer->flush = flush;
         }