Mercurial > hg > nginx-quic
diff src/os/win32/ngx_process_cycle.c @ 3247:1f3cd08ebb82 stable-0.7
merge r3017, r3018, r3019, r3020, r3021, r3022, r3023, r3196:
cache management fixes:
*) separate cache loader process
*) use real file cache length, this fixes cache size counting for responses
without "Content-Length" header and 304 responses.
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Mon, 26 Oct 2009 17:23:49 +0000 |
parents | 87da6664fb49 |
children | 8c76116820f3 |
line wrap: on
line diff
--- a/src/os/win32/ngx_process_cycle.c +++ b/src/os/win32/ngx_process_cycle.c @@ -25,6 +25,7 @@ static void ngx_worker_process_exit(ngx_ static ngx_thread_value_t __stdcall ngx_worker_thread(void *data); static ngx_thread_value_t __stdcall ngx_cache_manager_thread(void *data); static void ngx_cache_manager_process_handler(void); +static ngx_thread_value_t __stdcall ngx_cache_loader_thread(void *data); ngx_uint_t ngx_process; @@ -440,10 +441,10 @@ ngx_quit_worker_processes(ngx_cycle_t *c ngx_processes[n].pid, ngx_processes[n].handle, ngx_processes[n].exiting, - ngx_processes[n].just_respawn); + ngx_processes[n].just_spawn); - if (old && ngx_processes[n].just_respawn) { - ngx_processes[n].just_respawn = 0; + if (old && ngx_processes[n].just_spawn) { + ngx_processes[n].just_spawn = 0; continue; } @@ -550,7 +551,7 @@ found: ngx_processes[n].pid, ngx_processes[n].handle, ngx_processes[n].exiting, - ngx_processes[n].just_respawn); + ngx_processes[n].just_spawn); if (ngx_processes[n].handle) { return 1; @@ -670,6 +671,10 @@ ngx_worker_process_cycle(ngx_cycle_t *cy goto failed; } + if (ngx_create_thread(&cmtid, ngx_cache_loader_thread, NULL, log) != 0) { + goto failed; + } + for ( ;; ) { ev = WaitForMultipleObjects(3, events, 0, INFINITE); @@ -925,7 +930,7 @@ ngx_cache_manager_thread(void *data) return 0; } - break; + break; } for ( ;; ) { @@ -985,6 +990,34 @@ ngx_cache_manager_process_handler(void) } +static ngx_thread_value_t __stdcall +ngx_cache_loader_thread(void *data) +{ + ngx_uint_t i; + ngx_path_t **path; + ngx_cycle_t *cycle; + + ngx_msleep(60000); + + cycle = (ngx_cycle_t *) ngx_cycle; + + path = cycle->pathes.elts; + for (i = 0; i < cycle->pathes.nelts; i++) { + + if (ngx_terminate || ngx_quit) { + break; + } + + if (path[i]->loader) { + path[i]->loader(path[i]->data); + ngx_time_update(0, 0); + } + } + + return 0; +} + + void ngx_single_process_cycle(ngx_cycle_t *cycle) {