diff options
| author | Igor Sysoev <igor@sysoev.ru> | 2009-08-21 09:06:35 +0000 |
|---|---|---|
| committer | Igor Sysoev <igor@sysoev.ru> | 2009-08-21 09:06:35 +0000 |
| commit | 3a58935936f3baca6bbccafc375c8f5656c5d39a (patch) | |
| tree | 26b5ad8d59118ff077a8183b1e3d28121c0ad14f /src/core | |
| parent | f95847d0ba46a49df8d32d48b2585dac0090c0fb (diff) | |
| download | nginx-3a58935936f3baca6bbccafc375c8f5656c5d39a.tar.gz nginx-3a58935936f3baca6bbccafc375c8f5656c5d39a.tar.bz2 | |
*) share temporary number between workers
*) randomize collision offset
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/ngx_file.c | 23 | ||||
| -rw-r--r-- | src/core/ngx_file.h | 5 |
2 files changed, 13 insertions, 15 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_ */ |
