Mercurial > hg > nginx-vendor-0-8
view src/os/unix/ngx_atomic.h @ 142:84910468f6de NGINX_0_3_18
nginx 0.3.18
*) Feature: the "server_names" directive supports the ".domain.tld"
names.
*) Feature: the "server_names" directive uses the hash for the
"*.domain.tld" names and more effective hash for usual names.
*) Change: the "server_names_hash_max_size" and
"server_names_hash_bucket_size" directives.
*) Change: the "server_names_hash" and "server_names_hash_threshold"
directives were canceled.
*) Feature: the "valid_referers" directive uses the hash site names.
*) Change: now the "valid_referers" directive checks the site names
only without the URI part.
*) Bugfix: some ".domain.tld" names incorrectly processed by the
ngx_http_map_module.
*) Bugfix: segmentation fault was occurred if configuration file did
not exist; bug appeared in 0.3.12.
*) Bugfix: on 64-bit platforms segmentation fault may occurred on
start; bug appeared in 0.3.16.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Mon, 26 Dec 2005 00:00:00 +0300 |
parents | e85dca77c46a |
children | 73e8476f9142 |
line wrap: on
line source
/* * Copyright (C) Igor Sysoev */ #ifndef _NGX_ATOMIC_H_INCLUDED_ #define _NGX_ATOMIC_H_INCLUDED_ #include <ngx_config.h> #include <ngx_core.h> #if ( __i386__ || __i386 ) typedef int32_t ngx_atomic_int_t; typedef uint32_t ngx_atomic_uint_t; typedef volatile ngx_atomic_uint_t ngx_atomic_t; #define NGX_ATOMIC_T_LEN sizeof("-2147483648") - 1 #if ( __SUNPRO_C ) #define NGX_HAVE_ATOMIC_OPS 1 ngx_atomic_uint_t ngx_atomic_cmp_set(ngx_atomic_t *lock, ngx_atomic_uint_t old, ngx_atomic_uint_t set); ngx_atomic_int_t ngx_atomic_fetch_add(ngx_atomic_t *value, ngx_atomic_int_t add); /* the code in src/os/unix/ngx_sunpro_x86.il */ #define ngx_memory_barrier() __asm (".volatile"); __asm (".nonvolatile") #else /* ( __GNUC__ || __INTEL_COMPILER ) */ #define NGX_HAVE_ATOMIC_OPS 1 #include "ngx_gcc_atomic_x86.h" #endif #elif ( __amd64__ || __amd64 ) typedef int64_t ngx_atomic_int_t; typedef uint64_t ngx_atomic_uint_t; typedef volatile ngx_atomic_uint_t ngx_atomic_t; #define NGX_ATOMIC_T_LEN sizeof("-9223372036854775808") - 1 #if ( __SUNPRO_C ) #define NGX_HAVE_ATOMIC_OPS 1 ngx_atomic_uint_t ngx_atomic_cmp_set(ngx_atomic_t *lock, ngx_atomic_uint_t old, ngx_atomic_uint_t set); ngx_atomic_int_t ngx_atomic_fetch_add(ngx_atomic_t *value, ngx_atomic_int_t add); /* the code in src/os/unix/ngx_sunpro_amd64.il */ #define ngx_memory_barrier() __asm (".volatile"); __asm (".nonvolatile") #else /* ( __GNUC__ || __INTEL_COMPILER ) */ #define NGX_HAVE_ATOMIC_OPS 1 #include "ngx_gcc_atomic_amd64.h" #endif #elif ( __sparc__ || __sparcv9 ) #if (NGX_PTR_SIZE == 8) typedef int64_t ngx_atomic_int_t; typedef uint64_t ngx_atomic_uint_t; #define NGX_ATOMIC_T_LEN sizeof("-9223372036854775808") - 1 #else typedef int32_t ngx_atomic_int_t; typedef uint32_t ngx_atomic_uint_t; #define NGX_ATOMIC_T_LEN sizeof("-2147483648") - 1 #endif typedef volatile ngx_atomic_uint_t ngx_atomic_t; #if ( __SUNPRO_C ) #define NGX_HAVE_ATOMIC_OPS 1 #include "ngx_sunpro_atomic_sparc64.h" #else /* ( __GNUC__ || __INTEL_COMPILER ) */ #define NGX_HAVE_ATOMIC_OPS 1 #include "ngx_gcc_atomic_sparc64.h" #endif #elif ( __ppc__ || __powerpc__ ) #define NGX_HAVE_ATOMIC_OPS 1 #if (NGX_PTR_SIZE == 8) typedef int64_t ngx_atomic_int_t; typedef uint64_t ngx_atomic_uint_t; #define NGX_ATOMIC_T_LEN sizeof("-9223372036854775808") - 1 #else typedef int32_t ngx_atomic_int_t; typedef uint32_t ngx_atomic_uint_t; #define NGX_ATOMIC_T_LEN sizeof("-2147483648") - 1 #endif typedef volatile ngx_atomic_uint_t ngx_atomic_t; #include "ngx_gcc_atomic_ppc.h" #endif #if !(NGX_HAVE_ATOMIC_OPS) #define NGX_HAVE_ATOMIC_OPS 0 typedef int32_t ngx_atomic_int_t; typedef uint32_t ngx_atomic_uint_t; typedef volatile ngx_atomic_uint_t ngx_atomic_t; #define NGX_ATOMIC_T_LEN sizeof("-2147483648") - 1 static ngx_inline ngx_atomic_uint_t ngx_atomic_cmp_set(ngx_atomic_t *lock, ngx_atomic_uint_t old, ngx_atomic_uint_t set) { if (*lock == old) { *lock = set; return 1; } return 0; } static ngx_inline ngx_atomic_int_t ngx_atomic_fetch_add(ngx_atomic_t *value, ngx_atomic_int_t add) { ngx_atomic_int_t old; old = *value; *value += add; return old; } #define ngx_memory_barrier() #endif void ngx_spinlock(ngx_atomic_t *lock, ngx_uint_t spin); #define ngx_trylock(lock) (*(lock) == 0 && ngx_atomic_cmp_set(lock, 0, 1)) #define ngx_unlock(lock) *(lock) = 0 #endif /* _NGX_ATOMIC_H_INCLUDED_ */