aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/ngx_file.c23
-rw-r--r--src/core/ngx_file.h5
-rw-r--r--src/event/ngx_event.c34
-rw-r--r--src/os/unix/ngx_process_cycle.c4
-rw-r--r--src/os/win32/ngx_process_cycle.c4
5 files changed, 34 insertions, 36 deletions
diff --git a/src/core/ngx_file.c b/src/core/ngx_file.c
index 3a489608a..45bb4ca4f 100644
--- a/src/core/ngx_file.c
+++ b/src/core/ngx_file.c
@@ -8,8 +8,9 @@
#include <ngx_core.h>
-static ngx_atomic_uint_t ngx_temp_number;
-static ngx_atomic_uint_t ngx_random_number;
+static ngx_atomic_t temp_number = 0;
+ngx_atomic_t *ngx_temp_number = &temp_number;
+ngx_atomic_int_t ngx_random_number = 123456;
ssize_t
@@ -205,22 +206,16 @@ ngx_create_full_path(u_char *dir, ngx_uint_t access)
}
-void
-ngx_init_temp_number(void)
-{
- ngx_temp_number = 0;
- ngx_random_number = 123456;
-}
-
-
ngx_atomic_uint_t
ngx_next_temp_number(ngx_uint_t collision)
{
- if (collision) {
- ngx_temp_number += ngx_random_number;
- }
+ ngx_atomic_uint_t n, add;
+
+ add = collision ? ngx_random_number : 1;
+
+ n = ngx_atomic_fetch_add(ngx_temp_number, add);
- return ngx_temp_number++;
+ return n + add;
}
diff --git a/src/core/ngx_file.h b/src/core/ngx_file.h
index 0da8646eb..56315433b 100644
--- a/src/core/ngx_file.h
+++ b/src/core/ngx_file.h
@@ -129,7 +129,6 @@ ngx_int_t ngx_ext_rename_file(ngx_str_t *src, ngx_str_t *to,
ngx_int_t ngx_copy_file(u_char *from, u_char *to, ngx_copy_file_t *cf);
ngx_int_t ngx_walk_tree(ngx_tree_ctx_t *ctx, ngx_str_t *tree);
-void ngx_init_temp_number(void);
ngx_atomic_uint_t ngx_next_temp_number(ngx_uint_t collision);
char *ngx_conf_set_path_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
@@ -138,4 +137,8 @@ char *ngx_conf_merge_path_value(ngx_conf_t *cf, ngx_path_t **path,
char *ngx_conf_set_access_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
+extern ngx_atomic_t *ngx_temp_number;
+extern ngx_atomic_int_t ngx_random_number;
+
+
#endif /* _NGX_FILE_H_INCLUDED_ */
diff --git a/src/event/ngx_event.c b/src/event/ngx_event.c
index 7fc690115..9c13eac47 100644
--- a/src/event/ngx_event.c
+++ b/src/event/ngx_event.c
@@ -43,7 +43,7 @@ ngx_uint_t ngx_event_flags;
ngx_event_actions_t ngx_event_actions;
-ngx_atomic_t connection_counter = 1;
+static ngx_atomic_t connection_counter = 1;
ngx_atomic_t *ngx_connection_counter = &connection_counter;
@@ -429,6 +429,7 @@ ngx_event_module_init(ngx_cycle_t *cycle)
u_char *shared;
size_t size, cl;
ngx_shm_t shm;
+ ngx_time_t *tp;
ngx_core_conf_t *ccf;
ngx_event_conf_t *ecf;
@@ -492,7 +493,8 @@ ngx_event_module_init(ngx_cycle_t *cycle)
cl = 128;
size = cl /* ngx_accept_mutex */
- + cl; /* ngx_connection_counter */
+ + cl /* ngx_connection_counter */
+ + cl; /* ngx_temp_number */
#if (NGX_STAT_STUB)
@@ -526,23 +528,29 @@ ngx_event_module_init(ngx_cycle_t *cycle)
ngx_connection_counter = (ngx_atomic_t *) (shared + 1 * cl);
-#if (NGX_STAT_STUB)
-
- ngx_stat_accepted = (ngx_atomic_t *) (shared + 2 * cl);
- ngx_stat_handled = (ngx_atomic_t *) (shared + 3 * cl);
- ngx_stat_requests = (ngx_atomic_t *) (shared + 4 * cl);
- ngx_stat_active = (ngx_atomic_t *) (shared + 5 * cl);
- ngx_stat_reading = (ngx_atomic_t *) (shared + 6 * cl);
- ngx_stat_writing = (ngx_atomic_t *) (shared + 7 * cl);
-
-#endif
-
(void) ngx_atomic_cmp_set(ngx_connection_counter, 0, 1);
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
"counter: %p, %d",
ngx_connection_counter, *ngx_connection_counter);
+ ngx_temp_number = (ngx_atomic_t *) (shared + 2 * cl);
+
+ tp = ngx_timeofday();
+
+ ngx_random_number = (tp->msec << 16) + ngx_pid;
+
+#if (NGX_STAT_STUB)
+
+ ngx_stat_accepted = (ngx_atomic_t *) (shared + 3 * cl);
+ ngx_stat_handled = (ngx_atomic_t *) (shared + 4 * cl);
+ ngx_stat_requests = (ngx_atomic_t *) (shared + 5 * cl);
+ ngx_stat_active = (ngx_atomic_t *) (shared + 6 * cl);
+ ngx_stat_reading = (ngx_atomic_t *) (shared + 7 * cl);
+ ngx_stat_writing = (ngx_atomic_t *) (shared + 8 * cl);
+
+#endif
+
return NGX_OK;
}
diff --git a/src/os/unix/ngx_process_cycle.c b/src/os/unix/ngx_process_cycle.c
index c923209d4..69df544d3 100644
--- a/src/os/unix/ngx_process_cycle.c
+++ b/src/os/unix/ngx_process_cycle.c
@@ -277,8 +277,6 @@ ngx_single_process_cycle(ngx_cycle_t *cycle)
{
ngx_uint_t i;
- ngx_init_temp_number();
-
for (i = 0; ngx_modules[i]; i++) {
if (ngx_modules[i]->init_process) {
if (ngx_modules[i]->init_process(cycle) == NGX_ERROR) {
@@ -930,8 +928,6 @@ ngx_worker_process_init(ngx_cycle_t *cycle, ngx_uint_t priority)
"sigprocmask() failed");
}
- ngx_init_temp_number();
-
/*
* disable deleting previous events for the listening sockets because
* in the worker processes there are no events at all at this point
diff --git a/src/os/win32/ngx_process_cycle.c b/src/os/win32/ngx_process_cycle.c
index 7a4b9556f..59016b961 100644
--- a/src/os/win32/ngx_process_cycle.c
+++ b/src/os/win32/ngx_process_cycle.c
@@ -793,8 +793,6 @@ ngx_worker_thread(void *data)
cycle = (ngx_cycle_t *) ngx_cycle;
- ngx_init_temp_number();
-
for (n = 0; ngx_modules[n]; n++) {
if (ngx_modules[n]->init_process) {
if (ngx_modules[n]->init_process(cycle) == NGX_ERROR) {
@@ -1024,8 +1022,6 @@ ngx_single_process_cycle(ngx_cycle_t *cycle)
ngx_int_t i;
ngx_tid_t tid;
- ngx_init_temp_number();
-
for (i = 0; ngx_modules[i]; i++) {
if (ngx_modules[i]->init_process) {
if (ngx_modules[i]->init_process(cycle) == NGX_ERROR) {