changeset 1651:555ee689cecc

use usec and pid as start value
author Igor Sysoev <igor@sysoev.ru>
date Sat, 24 Nov 2007 10:43:15 +0000
parents d640570c342a
children cc7a7d0b89e8
files src/http/modules/ngx_http_userid_filter_module.c
diffstat 1 files changed, 20 insertions(+), 3 deletions(-) [+]
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;
+}
+