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;
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 */
ctx->uid_set[0] = conf->service;
}
ctx->uid_set[1] = ngx_time();
- ctx->uid_set[2] = ngx_pid;
+ ctx->uid_set[2] = start_value;
ctx->uid_set[3] = sequencer_v1;
sequencer_v1 += 0x100;
}
ctx->uid_set[1] = htonl(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) {
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;
+}
+