diff options
| author | Igor Sysoev <igor@sysoev.ru> | 2009-10-26 17:23:49 +0000 |
|---|---|---|
| committer | Igor Sysoev <igor@sysoev.ru> | 2009-10-26 17:23:49 +0000 |
| commit | 7571f6c962e5b02abf01b2f1c9f84cb109728d4d (patch) | |
| tree | 5170b786a8b635703d8d7e1d61bf16bb94ac85b3 /src/os/win32/ngx_process_cycle.c | |
| parent | 7201f40d9fa6e0bf548dffb76e8fb6ab7bac5cf6 (diff) | |
| download | nginx-7571f6c962e5b02abf01b2f1c9f84cb109728d4d.tar.gz nginx-7571f6c962e5b02abf01b2f1c9f84cb109728d4d.tar.bz2 | |
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.
Diffstat (limited to 'src/os/win32/ngx_process_cycle.c')
| -rw-r--r-- | src/os/win32/ngx_process_cycle.c | 43 |
1 files changed, 38 insertions, 5 deletions
diff --git a/src/os/win32/ngx_process_cycle.c b/src/os/win32/ngx_process_cycle.c index 12b13d17e..7a4b9556f 100644 --- 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_cycle_t *cycle); 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 *cycle, ngx_uint_t old) 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 *cycle, char *mevn) 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) { |
