From 8f6958baa97b43d16185364dcfb7d68361012740 Mon Sep 17 00:00:00 2001 From: Maxim Dounin Date: Mon, 31 Mar 2014 21:38:28 +0400 Subject: [PATCH] Win32: fixed cpu hog by cache manager on exit (ticket #514). The "ngx_quit" may be reset by the worker thread before it's seen by a ngx_cache_manager_thread(), resulting in an infinite loop. Make sure to test ngx_exiting as well. --- src/os/win32/ngx_process_cycle.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/os/win32/ngx_process_cycle.c b/src/os/win32/ngx_process_cycle.c index be8d9ac65..183efc896 100644 --- a/src/os/win32/ngx_process_cycle.c +++ b/src/os/win32/ngx_process_cycle.c @@ -926,7 +926,7 @@ ngx_cache_manager_thread(void *data) * ev == WAIT_ABANDONED_0 + 1 */ - if (ngx_terminate || ngx_quit) { + if (ngx_terminate || ngx_quit || ngx_exiting) { ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "exiting"); return 0; } @@ -936,7 +936,7 @@ ngx_cache_manager_thread(void *data) for ( ;; ) { - if (ngx_terminate || ngx_quit) { + if (ngx_terminate || ngx_quit || ngx_exiting) { ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "exiting"); break; } @@ -1005,7 +1005,7 @@ ngx_cache_loader_thread(void *data) path = cycle->paths.elts; for (i = 0; i < cycle->paths.nelts; i++) { - if (ngx_terminate || ngx_quit) { + if (ngx_terminate || ngx_quit || ngx_exiting) { break; }