diff src/http/modules/ngx_http_userid_filter_module.c @ 348:e10168d6e371 NGINX_0_6_18

nginx 0.6.18 *) Change: now the ngx_http_userid_module adds start time microseconds to the cookie field contains a pid value. *) Change: now the full request line instead of URI only is written to error_log. *) Feature: variables support in the "proxy_pass" directive. *) Feature: the "resolver" and "resolver_timeout" directives. *) Feature: now the directive "add_header last-modified ''" deletes a "Last-Modified" response header line. *) Bugfix: the "limit_rate" directive did not allow to use full throughput, even if limit value was very high.
author Igor Sysoev <http://sysoev.ru>
date Tue, 27 Nov 2007 00:00:00 +0300
parents 05693816539c
children 54fad6c4b555
line wrap: on
line diff
--- a/src/http/modules/ngx_http_userid_filter_module.c
+++ b/src/http/modules/ngx_http_userid_filter_module.c
@@ -61,9 +61,11 @@ static char *ngx_http_userid_expires(ngx
 static char *ngx_http_userid_p3p(ngx_conf_t *cf, void *post, void *data);
 static char *ngx_http_userid_mark(ngx_conf_t *cf, ngx_command_t *cmd,
     void *conf);
+static ngx_int_t ngx_http_userid_init_worker(ngx_cycle_t *cycle);
 
 
 
+static uint32_t  start_value;
 static uint32_t  sequencer_v1 = 1;
 static uint32_t  sequencer_v2 = 0x03030302;
 
@@ -173,7 +175,7 @@ ngx_module_t  ngx_http_userid_filter_mod
     NGX_HTTP_MODULE,                       /* module type */
     NULL,                                  /* init master */
     NULL,                                  /* init module */
-    NULL,                                  /* init process */
+    ngx_http_userid_init_worker,           /* init process */
     NULL,                                  /* init thread */
     NULL,                                  /* exit thread */
     NULL,                                  /* exit process */
@@ -319,7 +321,7 @@ ngx_http_userid_set_uid(ngx_http_request
                 ctx->uid_set[0] = conf->service;
             }
             ctx->uid_set[1] = (uint32_t) ngx_time();
-            ctx->uid_set[2] = ngx_pid;
+            ctx->uid_set[2] = start_value;
             ctx->uid_set[3] = sequencer_v1;
             sequencer_v1 += 0x100;
 
@@ -346,7 +348,7 @@ ngx_http_userid_set_uid(ngx_http_request
             }
 
             ctx->uid_set[1] = htonl((uint32_t) ngx_time());
-            ctx->uid_set[2] = htonl(ngx_pid);
+            ctx->uid_set[2] = htonl(start_value);
             ctx->uid_set[3] = htonl(sequencer_v2);
             sequencer_v2 += 0x100;
             if (sequencer_v2 < 0x03030302) {
@@ -706,3 +708,18 @@ ngx_http_userid_mark(ngx_conf_t *cf, ngx
 
     return NGX_CONF_OK;
 }
+
+
+static ngx_int_t
+ngx_http_userid_init_worker(ngx_cycle_t *cycle)
+{
+    struct timeval  tp;
+
+    ngx_gettimeofday(&tp);
+
+    /* use the most significant usec part that fits to 16 bits */
+    start_value = ((tp.tv_usec / 20) << 16) | ngx_pid;
+
+    return NGX_OK;
+}
+