]> git.kaiwu.me - nginx.git/commitdiff
Win32: fixed cpu hog by cache manager on exit (ticket #514).
authorMaxim Dounin <mdounin@mdounin.ru>
Mon, 31 Mar 2014 17:38:28 +0000 (21:38 +0400)
committerMaxim Dounin <mdounin@mdounin.ru>
Mon, 31 Mar 2014 17:38:28 +0000 (21:38 +0400)
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

index be8d9ac65e830a57c5ffa9593a751277a3cb0835..183efc8963843cbd9df6e4bd0725396c00da38de 100644 (file)
@@ -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;
         }