details: http://hg.nginx.org/nginx/rev/b74f1106f920 branches: changeset: 5633:b74f1106f920 user: Maxim Dounin <mdou...@mdounin.ru> date: Mon Mar 31 21:38:28 2014 +0400 description: 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. diffstat: src/os/win32/ngx_process_cycle.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diffs (30 lines): diff --git a/src/os/win32/ngx_process_cycle.c b/src/os/win32/ngx_process_cycle.c --- 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; } _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel