comparison src/os/win32/ngx_process_cycle.c @ 5633:b74f1106f920

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.
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 31 Mar 2014 21:38:28 +0400
parents e45fa57ef725
children 3efdd7788bb0
comparison
equal deleted inserted replaced
5632:b42e7c790b81 5633:b74f1106f920
924 * ev == WAIT_OBJECT_0 924 * ev == WAIT_OBJECT_0
925 * ev == WAIT_OBJECT_0 + 1 925 * ev == WAIT_OBJECT_0 + 1
926 * ev == WAIT_ABANDONED_0 + 1 926 * ev == WAIT_ABANDONED_0 + 1
927 */ 927 */
928 928
929 if (ngx_terminate || ngx_quit) { 929 if (ngx_terminate || ngx_quit || ngx_exiting) {
930 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "exiting"); 930 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "exiting");
931 return 0; 931 return 0;
932 } 932 }
933 933
934 break; 934 break;
935 } 935 }
936 936
937 for ( ;; ) { 937 for ( ;; ) {
938 938
939 if (ngx_terminate || ngx_quit) { 939 if (ngx_terminate || ngx_quit || ngx_exiting) {
940 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "exiting"); 940 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "exiting");
941 break; 941 break;
942 } 942 }
943 943
944 ngx_cache_manager_process_handler(); 944 ngx_cache_manager_process_handler();
1003 cycle = (ngx_cycle_t *) ngx_cycle; 1003 cycle = (ngx_cycle_t *) ngx_cycle;
1004 1004
1005 path = cycle->paths.elts; 1005 path = cycle->paths.elts;
1006 for (i = 0; i < cycle->paths.nelts; i++) { 1006 for (i = 0; i < cycle->paths.nelts; i++) {
1007 1007
1008 if (ngx_terminate || ngx_quit) { 1008 if (ngx_terminate || ngx_quit || ngx_exiting) {
1009 break; 1009 break;
1010 } 1010 }
1011 1011
1012 if (path[i]->loader) { 1012 if (path[i]->loader) {
1013 path[i]->loader(path[i]->data); 1013 path[i]->loader(path[i]->data);