Mercurial > hg > nginx
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); |