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)
 {