Mercurial > hg > nginx-vendor-0-7
view src/os/unix/ngx_atomic.h @ 178:87699398f955 NGINX_0_3_36
nginx 0.3.36
*) Feature: the ngx_http_addition_filter_module.
*) Feature: the "proxy_pass" and "fastcgi_pass" directives may be used
inside the "if" block.
*) Feature: the "proxy_ignore_client_abort" and
"fastcgi_ignore_client_abort" directives.
*) Feature: the "$request_completion" variable.
*) Feature: the ngx_http_perl_module supports the $r->request_method
and $r->remote_addr.
*) Feature: the ngx_http_ssi_module supports the "elif" command.
*) Bugfix: the "\/" string in the expression of the "if" command of the
ngx_http_ssi_module was treated incorrectly.
*) Bugfix: in the regular expressions in the "if" command of the
ngx_http_ssi_module.
*) Bugfix: if the relative path was specified in the
"client_body_temp_path", "proxy_temp_path", "fastcgi_temp_path", and
"perl_modules" directives, then the directory was used relatively to
a current path but not to a server prefix.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Wed, 05 Apr 2006 00:00:00 +0400 |
parents | 6be073125f2e |
children | 6eb1e38f0f1f |
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") #define ngx_cpu_pause() __asm ("pause") #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") #define ngx_cpu_pause() __asm ("pause") #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 ( __powerpc__ || __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() #define ngx_cpu_pause() #endif void ngx_spinlock(ngx_atomic_t *lock, ngx_atomic_int_t value, 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_ */