annotate src/os/unix/ngx_atomic.h @ 7690:8253424d1aff

Added size check to ngx_http_alloc_large_header_buffer(). This ensures that copying won't write more than the buffer size even if the buffer comes from hc->free and it is smaller than the large client header buffer size in the virtual host configuration. This might happen if size of large client header buffers is different in name-based virtual hosts, similarly to the problem with number of buffers fixed in 6926:e662cbf1b932.
author Maxim Dounin <mdounin@mdounin.ru>
date Thu, 06 Aug 2020 05:02:22 +0300
parents 2cd019520210
children 09d15a2dbc6b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
2 /*
444
42d11f017717 nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents: 441
diff changeset
3 * Copyright (C) Igor Sysoev
4412
d620f497c50f Copyright updated.
Maxim Konovalov <maxim@nginx.com>
parents: 3378
diff changeset
4 * Copyright (C) Nginx, Inc.
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
5 */
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
6
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
7
212
679f60139863 nginx-0.0.1-2003-12-19-11:15:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #ifndef _NGX_ATOMIC_H_INCLUDED_
679f60139863 nginx-0.0.1-2003-12-19-11:15:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 #define _NGX_ATOMIC_H_INCLUDED_
679f60139863 nginx-0.0.1-2003-12-19-11:15:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10
679f60139863 nginx-0.0.1-2003-12-19-11:15:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11
679f60139863 nginx-0.0.1-2003-12-19-11:15:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12 #include <ngx_config.h>
679f60139863 nginx-0.0.1-2003-12-19-11:15:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
13 #include <ngx_core.h>
679f60139863 nginx-0.0.1-2003-12-19-11:15:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
14
679f60139863 nginx-0.0.1-2003-12-19-11:15:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
15
3363
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
16 #if (NGX_HAVE_LIBATOMIC)
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
17
3378
5d17022a1e88 fix libatomic usage on arm, cris, hppa, m68k, and sparc platforms
Igor Sysoev <igor@sysoev.ru>
parents: 3363
diff changeset
18 #define AO_REQUIRE_CAS
3363
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
19 #include <atomic_ops.h>
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
20
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
21 #define NGX_HAVE_ATOMIC_OPS 1
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
22
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
23 typedef long ngx_atomic_int_t;
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
24 typedef AO_t ngx_atomic_uint_t;
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
25 typedef volatile ngx_atomic_uint_t ngx_atomic_t;
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
26
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
27 #if (NGX_PTR_SIZE == 8)
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
28 #define NGX_ATOMIC_T_LEN (sizeof("-9223372036854775808") - 1)
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
29 #else
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
30 #define NGX_ATOMIC_T_LEN (sizeof("-2147483648") - 1)
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
31 #endif
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
32
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
33 #define ngx_atomic_cmp_set(lock, old, new) \
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
34 AO_compare_and_swap(lock, old, new)
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
35 #define ngx_atomic_fetch_add(value, add) \
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
36 AO_fetch_and_add(value, add)
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
37 #define ngx_memory_barrier() AO_nop()
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
38 #define ngx_cpu_pause()
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
39
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
40
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
41 #elif (NGX_DARWIN_ATOMIC)
939
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
42
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
43 /*
940
ca9fe5ae412b test Darwin 8 atomic(3)
Igor Sysoev <igor@sysoev.ru>
parents: 939
diff changeset
44 * use Darwin 8 atomic(3) and barrier(3) operations
ca9fe5ae412b test Darwin 8 atomic(3)
Igor Sysoev <igor@sysoev.ru>
parents: 939
diff changeset
45 * optimized at run-time for UP and SMP
939
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
46 */
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
47
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
48 #include <libkern/OSAtomic.h>
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
49
2133
c505e2712e13 fix conflicting names "true" and "false"
Igor Sysoev <igor@sysoev.ru>
parents: 1309
diff changeset
50 /* "bool" conflicts with perl's CORE/handy.h */
4759
4c36e15651f7 Fixed compilation with -Wmissing-prototypes.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
51 #if 0
939
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
52 #undef bool
4759
4c36e15651f7 Fixed compilation with -Wmissing-prototypes.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
53 #endif
939
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
54
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
55
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
56 #define NGX_HAVE_ATOMIC_OPS 1
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
57
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
58 #if (NGX_PTR_SIZE == 8)
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
59
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
60 typedef int64_t ngx_atomic_int_t;
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
61 typedef uint64_t ngx_atomic_uint_t;
3165
7658e9c7e814 use parents around NGX_ATOMIC_T_LEN value
Igor Sysoev <igor@sysoev.ru>
parents: 2133
diff changeset
62 #define NGX_ATOMIC_T_LEN (sizeof("-9223372036854775808") - 1)
939
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
63
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
64 #define ngx_atomic_cmp_set(lock, old, new) \
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
65 OSAtomicCompareAndSwap64Barrier(old, new, (int64_t *) lock)
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
66
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
67 #define ngx_atomic_fetch_add(value, add) \
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
68 (OSAtomicAdd64(add, (int64_t *) value) - add)
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
69
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
70 #else
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
71
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
72 typedef int32_t ngx_atomic_int_t;
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
73 typedef uint32_t ngx_atomic_uint_t;
3165
7658e9c7e814 use parents around NGX_ATOMIC_T_LEN value
Igor Sysoev <igor@sysoev.ru>
parents: 2133
diff changeset
74 #define NGX_ATOMIC_T_LEN (sizeof("-2147483648") - 1)
939
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
75
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
76 #define ngx_atomic_cmp_set(lock, old, new) \
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
77 OSAtomicCompareAndSwap32Barrier(old, new, (int32_t *) lock)
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
78
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
79 #define ngx_atomic_fetch_add(value, add) \
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
80 (OSAtomicAdd32(add, (int32_t *) value) - add)
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
81
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
82 #endif
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
83
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
84 #define ngx_memory_barrier() OSMemoryBarrier()
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
85
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
86 #define ngx_cpu_pause()
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
87
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
88 typedef volatile ngx_atomic_uint_t ngx_atomic_t;
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
89
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
90
3362
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
91 #elif (NGX_HAVE_GCC_ATOMIC)
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
92
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
93 /* GCC 4.1 builtin atomic operations */
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
94
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
95 #define NGX_HAVE_ATOMIC_OPS 1
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
96
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
97 typedef long ngx_atomic_int_t;
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
98 typedef unsigned long ngx_atomic_uint_t;
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
99
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
100 #if (NGX_PTR_SIZE == 8)
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
101 #define NGX_ATOMIC_T_LEN (sizeof("-9223372036854775808") - 1)
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
102 #else
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
103 #define NGX_ATOMIC_T_LEN (sizeof("-2147483648") - 1)
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
104 #endif
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
105
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
106 typedef volatile ngx_atomic_uint_t ngx_atomic_t;
939
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
107
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
108
3362
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
109 #define ngx_atomic_cmp_set(lock, old, set) \
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
110 __sync_bool_compare_and_swap(lock, old, set)
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
111
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
112 #define ngx_atomic_fetch_add(value, add) \
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
113 __sync_fetch_and_add(value, add)
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
114
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
115 #define ngx_memory_barrier() __sync_synchronize()
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
116
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
117 #if ( __i386__ || __i386 || __amd64__ || __amd64 )
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
118 #define ngx_cpu_pause() __asm__ ("pause")
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
119 #else
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
120 #define ngx_cpu_pause()
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
121 #endif
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
122
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
123
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
124 #elif ( __i386__ || __i386 )
266
5238e93961a1 nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 213
diff changeset
125
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
126 typedef int32_t ngx_atomic_int_t;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
127 typedef uint32_t ngx_atomic_uint_t;
495
fc9909c369b2 nginx-0.1.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
128 typedef volatile ngx_atomic_uint_t ngx_atomic_t;
3165
7658e9c7e814 use parents around NGX_ATOMIC_T_LEN value
Igor Sysoev <igor@sysoev.ru>
parents: 2133
diff changeset
129 #define NGX_ATOMIC_T_LEN (sizeof("-2147483648") - 1)
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
130
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
131
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
132 #if ( __SUNPRO_C )
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
133
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
134 #define NGX_HAVE_ATOMIC_OPS 1
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
135
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
136 ngx_atomic_uint_t
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
137 ngx_atomic_cmp_set(ngx_atomic_t *lock, ngx_atomic_uint_t old,
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
138 ngx_atomic_uint_t set);
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
139
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
140 ngx_atomic_int_t
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
141 ngx_atomic_fetch_add(ngx_atomic_t *value, ngx_atomic_int_t add);
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
142
1309
08c6ee7a1b11 Sun Studio 12 compatibility
Igor Sysoev <igor@sysoev.ru>
parents: 1308
diff changeset
143 /*
08c6ee7a1b11 Sun Studio 12 compatibility
Igor Sysoev <igor@sysoev.ru>
parents: 1308
diff changeset
144 * Sun Studio 12 exits with segmentation fault on '__asm ("pause")',
08c6ee7a1b11 Sun Studio 12 compatibility
Igor Sysoev <igor@sysoev.ru>
parents: 1308
diff changeset
145 * so ngx_cpu_pause is declared in src/os/unix/ngx_sunpro_x86.il
08c6ee7a1b11 Sun Studio 12 compatibility
Igor Sysoev <igor@sysoev.ru>
parents: 1308
diff changeset
146 */
08c6ee7a1b11 Sun Studio 12 compatibility
Igor Sysoev <igor@sysoev.ru>
parents: 1308
diff changeset
147
08c6ee7a1b11 Sun Studio 12 compatibility
Igor Sysoev <igor@sysoev.ru>
parents: 1308
diff changeset
148 void
08c6ee7a1b11 Sun Studio 12 compatibility
Igor Sysoev <igor@sysoev.ru>
parents: 1308
diff changeset
149 ngx_cpu_pause(void);
08c6ee7a1b11 Sun Studio 12 compatibility
Igor Sysoev <igor@sysoev.ru>
parents: 1308
diff changeset
150
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
151 /* the code in src/os/unix/ngx_sunpro_x86.il */
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
152
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
153 #define ngx_memory_barrier() __asm (".volatile"); __asm (".nonvolatile")
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
154
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
155
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
156 #else /* ( __GNUC__ || __INTEL_COMPILER ) */
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
157
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
158 #define NGX_HAVE_ATOMIC_OPS 1
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
159
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
160 #include "ngx_gcc_atomic_x86.h"
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
161
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
162 #endif
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
163
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
164
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
165 #elif ( __amd64__ || __amd64 )
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
166
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
167 typedef int64_t ngx_atomic_int_t;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
168 typedef uint64_t ngx_atomic_uint_t;
495
fc9909c369b2 nginx-0.1.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
169 typedef volatile ngx_atomic_uint_t ngx_atomic_t;
3165
7658e9c7e814 use parents around NGX_ATOMIC_T_LEN value
Igor Sysoev <igor@sysoev.ru>
parents: 2133
diff changeset
170 #define NGX_ATOMIC_T_LEN (sizeof("-9223372036854775808") - 1)
266
5238e93961a1 nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 213
diff changeset
171
5238e93961a1 nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 213
diff changeset
172
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
173 #if ( __SUNPRO_C )
435
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 433
diff changeset
174
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
175 #define NGX_HAVE_ATOMIC_OPS 1
266
5238e93961a1 nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 213
diff changeset
176
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
177 ngx_atomic_uint_t
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
178 ngx_atomic_cmp_set(ngx_atomic_t *lock, ngx_atomic_uint_t old,
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
179 ngx_atomic_uint_t set);
266
5238e93961a1 nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 213
diff changeset
180
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
181 ngx_atomic_int_t
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
182 ngx_atomic_fetch_add(ngx_atomic_t *value, ngx_atomic_int_t add);
266
5238e93961a1 nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 213
diff changeset
183
1309
08c6ee7a1b11 Sun Studio 12 compatibility
Igor Sysoev <igor@sysoev.ru>
parents: 1308
diff changeset
184 /*
08c6ee7a1b11 Sun Studio 12 compatibility
Igor Sysoev <igor@sysoev.ru>
parents: 1308
diff changeset
185 * Sun Studio 12 exits with segmentation fault on '__asm ("pause")',
08c6ee7a1b11 Sun Studio 12 compatibility
Igor Sysoev <igor@sysoev.ru>
parents: 1308
diff changeset
186 * so ngx_cpu_pause is declared in src/os/unix/ngx_sunpro_amd64.il
08c6ee7a1b11 Sun Studio 12 compatibility
Igor Sysoev <igor@sysoev.ru>
parents: 1308
diff changeset
187 */
08c6ee7a1b11 Sun Studio 12 compatibility
Igor Sysoev <igor@sysoev.ru>
parents: 1308
diff changeset
188
08c6ee7a1b11 Sun Studio 12 compatibility
Igor Sysoev <igor@sysoev.ru>
parents: 1308
diff changeset
189 void
08c6ee7a1b11 Sun Studio 12 compatibility
Igor Sysoev <igor@sysoev.ru>
parents: 1308
diff changeset
190 ngx_cpu_pause(void);
08c6ee7a1b11 Sun Studio 12 compatibility
Igor Sysoev <igor@sysoev.ru>
parents: 1308
diff changeset
191
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
192 /* the code in src/os/unix/ngx_sunpro_amd64.il */
266
5238e93961a1 nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 213
diff changeset
193
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
194 #define ngx_memory_barrier() __asm (".volatile"); __asm (".nonvolatile")
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
195
435
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 433
diff changeset
196
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
197 #else /* ( __GNUC__ || __INTEL_COMPILER ) */
266
5238e93961a1 nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 213
diff changeset
198
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
199 #define NGX_HAVE_ATOMIC_OPS 1
266
5238e93961a1 nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 213
diff changeset
200
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
201 #include "ngx_gcc_atomic_amd64.h"
266
5238e93961a1 nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 213
diff changeset
202
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
203 #endif
266
5238e93961a1 nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 213
diff changeset
204
301
744965ec6275 nginx-0.0.3-2004-03-31-19:26:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 300
diff changeset
205
1308
63fa39cf8bd0 --with-cpu-opt=sparc32 and --with-cpu-opt=sparc64
Igor Sysoev <igor@sysoev.ru>
parents: 940
diff changeset
206 #elif ( __sparc__ || __sparc || __sparcv9 )
425
bd39260a1383 nginx-0.0.10-2004-09-14-19:55:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 373
diff changeset
207
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
208 #if (NGX_PTR_SIZE == 8)
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
209
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
210 typedef int64_t ngx_atomic_int_t;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
211 typedef uint64_t ngx_atomic_uint_t;
3165
7658e9c7e814 use parents around NGX_ATOMIC_T_LEN value
Igor Sysoev <igor@sysoev.ru>
parents: 2133
diff changeset
212 #define NGX_ATOMIC_T_LEN (sizeof("-9223372036854775808") - 1)
435
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 433
diff changeset
213
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
214 #else
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
215
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
216 typedef int32_t ngx_atomic_int_t;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
217 typedef uint32_t ngx_atomic_uint_t;
3165
7658e9c7e814 use parents around NGX_ATOMIC_T_LEN value
Igor Sysoev <igor@sysoev.ru>
parents: 2133
diff changeset
218 #define NGX_ATOMIC_T_LEN (sizeof("-2147483648") - 1)
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
219
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
220 #endif
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
221
495
fc9909c369b2 nginx-0.1.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
222 typedef volatile ngx_atomic_uint_t ngx_atomic_t;
425
bd39260a1383 nginx-0.0.10-2004-09-14-19:55:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 373
diff changeset
223
bd39260a1383 nginx-0.0.10-2004-09-14-19:55:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 373
diff changeset
224
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
225 #if ( __SUNPRO_C )
425
bd39260a1383 nginx-0.0.10-2004-09-14-19:55:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 373
diff changeset
226
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
227 #define NGX_HAVE_ATOMIC_OPS 1
425
bd39260a1383 nginx-0.0.10-2004-09-14-19:55:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 373
diff changeset
228
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
229 #include "ngx_sunpro_atomic_sparc64.h"
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
230
425
bd39260a1383 nginx-0.0.10-2004-09-14-19:55:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 373
diff changeset
231
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
232 #else /* ( __GNUC__ || __INTEL_COMPILER ) */
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
233
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
234 #define NGX_HAVE_ATOMIC_OPS 1
425
bd39260a1383 nginx-0.0.10-2004-09-14-19:55:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 373
diff changeset
235
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
236 #include "ngx_gcc_atomic_sparc64.h"
425
bd39260a1383 nginx-0.0.10-2004-09-14-19:55:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 373
diff changeset
237
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
238 #endif
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
239
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
240
613
c73c5c58c619 nginx-0.3.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
241 #elif ( __powerpc__ || __POWERPC__ )
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
242
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
243 #define NGX_HAVE_ATOMIC_OPS 1
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
244
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
245 #if (NGX_PTR_SIZE == 8)
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
246
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
247 typedef int64_t ngx_atomic_int_t;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
248 typedef uint64_t ngx_atomic_uint_t;
3165
7658e9c7e814 use parents around NGX_ATOMIC_T_LEN value
Igor Sysoev <igor@sysoev.ru>
parents: 2133
diff changeset
249 #define NGX_ATOMIC_T_LEN (sizeof("-9223372036854775808") - 1)
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
250
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
251 #else
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
252
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
253 typedef int32_t ngx_atomic_int_t;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
254 typedef uint32_t ngx_atomic_uint_t;
3165
7658e9c7e814 use parents around NGX_ATOMIC_T_LEN value
Igor Sysoev <igor@sysoev.ru>
parents: 2133
diff changeset
255 #define NGX_ATOMIC_T_LEN (sizeof("-2147483648") - 1)
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
256
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
257 #endif
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
258
495
fc9909c369b2 nginx-0.1.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
259 typedef volatile ngx_atomic_uint_t ngx_atomic_t;
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
260
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
261
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
262 #include "ngx_gcc_atomic_ppc.h"
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
263
939
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
264 #endif
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
265
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
266
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
267 #if !(NGX_HAVE_ATOMIC_OPS)
266
5238e93961a1 nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 213
diff changeset
268
435
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 433
diff changeset
269 #define NGX_HAVE_ATOMIC_OPS 0
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 433
diff changeset
270
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
271 typedef int32_t ngx_atomic_int_t;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
272 typedef uint32_t ngx_atomic_uint_t;
495
fc9909c369b2 nginx-0.1.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
273 typedef volatile ngx_atomic_uint_t ngx_atomic_t;
3165
7658e9c7e814 use parents around NGX_ATOMIC_T_LEN value
Igor Sysoev <igor@sysoev.ru>
parents: 2133
diff changeset
274 #define NGX_ATOMIC_T_LEN (sizeof("-2147483648") - 1)
266
5238e93961a1 nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 213
diff changeset
275
435
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 433
diff changeset
276
495
fc9909c369b2 nginx-0.1.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
277 static ngx_inline ngx_atomic_uint_t
fc9909c369b2 nginx-0.1.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
278 ngx_atomic_cmp_set(ngx_atomic_t *lock, ngx_atomic_uint_t old,
6474
Ruslan Ermilov <ru@nginx.com>
parents: 4759
diff changeset
279 ngx_atomic_uint_t set)
435
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 433
diff changeset
280 {
6474
Ruslan Ermilov <ru@nginx.com>
parents: 4759
diff changeset
281 if (*lock == old) {
Ruslan Ermilov <ru@nginx.com>
parents: 4759
diff changeset
282 *lock = set;
Ruslan Ermilov <ru@nginx.com>
parents: 4759
diff changeset
283 return 1;
Ruslan Ermilov <ru@nginx.com>
parents: 4759
diff changeset
284 }
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
285
6474
Ruslan Ermilov <ru@nginx.com>
parents: 4759
diff changeset
286 return 0;
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
287 }
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
288
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
289
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
290 static ngx_inline ngx_atomic_int_t
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
291 ngx_atomic_fetch_add(ngx_atomic_t *value, ngx_atomic_int_t add)
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
292 {
6474
Ruslan Ermilov <ru@nginx.com>
parents: 4759
diff changeset
293 ngx_atomic_int_t old;
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
294
6474
Ruslan Ermilov <ru@nginx.com>
parents: 4759
diff changeset
295 old = *value;
Ruslan Ermilov <ru@nginx.com>
parents: 4759
diff changeset
296 *value += add;
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
297
6474
Ruslan Ermilov <ru@nginx.com>
parents: 4759
diff changeset
298 return old;
435
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 433
diff changeset
299 }
266
5238e93961a1 nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 213
diff changeset
300
571
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
301 #define ngx_memory_barrier()
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
302 #define ngx_cpu_pause()
571
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
303
266
5238e93961a1 nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 213
diff changeset
304 #endif
212
679f60139863 nginx-0.0.1-2003-12-19-11:15:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
305
939
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
306
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
307 void ngx_spinlock(ngx_atomic_t *lock, ngx_atomic_int_t value, ngx_uint_t spin);
373
018569a8f09c nginx-0.0.7-2004-06-30-19:30:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 371
diff changeset
308
371
780e93985b93 nginx-0.0.7-2004-06-28-20:05:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 370
diff changeset
309 #define ngx_trylock(lock) (*(lock) == 0 && ngx_atomic_cmp_set(lock, 0, 1))
780e93985b93 nginx-0.0.7-2004-06-28-20:05:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 370
diff changeset
310 #define ngx_unlock(lock) *(lock) = 0
370
54f76b0b8dca nginx-0.0.7-2004-06-27-22:01:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 302
diff changeset
311
54f76b0b8dca nginx-0.0.7-2004-06-27-22:01:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 302
diff changeset
312
212
679f60139863 nginx-0.0.1-2003-12-19-11:15:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
313 #endif /* _NGX_ATOMIC_H_INCLUDED_ */