Mercurial > hg > nginx-vendor-current
annotate src/os/unix/ngx_sunpro_atomic_sparc64.h @ 662:e5fa0a4a7d27 NGINX_1_1_15
nginx 1.1.15
*) Feature: the "disable_symlinks" directive.
*) Feature: the "proxy_cookie_domain" and "proxy_cookie_path"
directives.
*) Bugfix: nginx might log incorrect error "upstream prematurely closed
connection" instead of correct "upstream sent too big header" one.
Thanks to Feibo Li.
*) Bugfix: nginx could not be built with the ngx_http_perl_module if the
--with-openssl option was used.
*) Bugfix: internal redirects to named locations were not limited.
*) Bugfix: calling $r->flush() multiple times might cause errors in the
ngx_http_gzip_filter_module.
*) Bugfix: temporary files might be not removed if the "proxy_store"
directive were used with SSI includes.
*) Bugfix: in some cases non-cacheable variables (such as the $args
variable) returned old empty cached value.
*) Bugfix: a segmentation fault might occur in a worker process if too
many SSI subrequests were issued simultaneously; the bug had appeared
in 0.7.25.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Wed, 15 Feb 2012 00:00:00 +0400 |
parents | d0f7a625f27c |
children |
rev | line source |
---|---|
110 | 1 |
2 /* | |
3 * Copyright (C) Igor Sysoev | |
660 | 4 * Copyright (C) Nginx, Inc. |
110 | 5 */ |
6 | |
7 | |
8 #if (NGX_PTR_SIZE == 4) | |
9 #define NGX_CASA ngx_casa | |
10 #else | |
11 #define NGX_CASA ngx_casxa | |
12 #endif | |
13 | |
14 | |
15 ngx_atomic_uint_t | |
16 ngx_casa(ngx_atomic_uint_t set, ngx_atomic_uint_t old, ngx_atomic_t *lock); | |
17 | |
18 ngx_atomic_uint_t | |
19 ngx_casxa(ngx_atomic_uint_t set, ngx_atomic_uint_t old, ngx_atomic_t *lock); | |
20 | |
21 /* the code in src/os/unix/ngx_sunpro_sparc64.il */ | |
22 | |
23 | |
24 static ngx_inline ngx_atomic_uint_t | |
25 ngx_atomic_cmp_set(ngx_atomic_t *lock, ngx_atomic_uint_t old, | |
26 ngx_atomic_uint_t set) | |
27 { | |
300 | 28 set = NGX_CASA(set, old, lock); |
110 | 29 |
30 return (set == old); | |
126 | 31 } |
110 | 32 |
33 | |
34 static ngx_inline ngx_atomic_int_t | |
35 ngx_atomic_fetch_add(ngx_atomic_t *value, ngx_atomic_int_t add) | |
36 { | |
37 ngx_atomic_uint_t old, res; | |
38 | |
39 old = *value; | |
40 | |
41 for ( ;; ) { | |
42 | |
43 res = old + add; | |
44 | |
300 | 45 res = NGX_CASA(res, old, value); |
110 | 46 |
47 if (res == old) { | |
48 return res; | |
49 } | |
50 | |
51 old = res; | |
52 } | |
53 } | |
112 | 54 |
55 | |
56 #define ngx_memory_barrier() \ | |
57 __asm (".volatile"); \ | |
58 __asm ("membar #LoadLoad | #LoadStore | #StoreStore | #StoreLoad"); \ | |
59 __asm (".nonvolatile") | |
160 | 60 |
61 #define ngx_cpu_pause() |