annotate src/os/unix/ngx_atomic.h @ 4311:45272aab5eea

Unlock of shared memory zones on process crash. If process exited abnormally while holding lock on some shared memory zone - unlock it. It may be not safe thing to do (as crash with lock held may result in corrupted shared memory structure, and other processes will subsequently crash while trying to access shared data), therefore complain loudly if unlock succeeds.
author Maxim Dounin <mdounin@mdounin.ru>
date Wed, 23 Nov 2011 14:09:19 +0000
parents 5d17022a1e88
children d620f497c50f
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
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
4 */
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
212
679f60139863 nginx-0.0.1-2003-12-19-11:15:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7 #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
8 #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
9
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 #include <ngx_config.h>
679f60139863 nginx-0.0.1-2003-12-19-11:15:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12 #include <ngx_core.h>
679f60139863 nginx-0.0.1-2003-12-19-11:15:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
13
679f60139863 nginx-0.0.1-2003-12-19-11:15:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
14
3363
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
15 #if (NGX_HAVE_LIBATOMIC)
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
16
3378
5d17022a1e88 fix libatomic usage on arm, cris, hppa, m68k, and sparc platforms
Igor Sysoev <igor@sysoev.ru>
parents: 3363
diff changeset
17 #define AO_REQUIRE_CAS
3363
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
18 #include <atomic_ops.h>
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
19
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
20 #define NGX_HAVE_ATOMIC_OPS 1
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
21
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
22 typedef long ngx_atomic_int_t;
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
23 typedef AO_t ngx_atomic_uint_t;
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
24 typedef volatile ngx_atomic_uint_t ngx_atomic_t;
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
25
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
26 #if (NGX_PTR_SIZE == 8)
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
27 #define NGX_ATOMIC_T_LEN (sizeof("-9223372036854775808") - 1)
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
28 #else
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
29 #define NGX_ATOMIC_T_LEN (sizeof("-2147483648") - 1)
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
30 #endif
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
31
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
32 #define ngx_atomic_cmp_set(lock, old, new) \
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
33 AO_compare_and_swap(lock, old, new)
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
34 #define ngx_atomic_fetch_add(value, add) \
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
35 AO_fetch_and_add(value, add)
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
36 #define ngx_memory_barrier() AO_nop()
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
37 #define ngx_cpu_pause()
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents: 3362
diff changeset
38
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 #elif (NGX_DARWIN_ATOMIC)
939
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
41
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
42 /*
940
ca9fe5ae412b test Darwin 8 atomic(3)
Igor Sysoev <igor@sysoev.ru>
parents: 939
diff changeset
43 * use Darwin 8 atomic(3) and barrier(3) operations
ca9fe5ae412b test Darwin 8 atomic(3)
Igor Sysoev <igor@sysoev.ru>
parents: 939
diff changeset
44 * 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
45 */
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 #include <libkern/OSAtomic.h>
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
48
2133
c505e2712e13 fix conflicting names "true" and "false"
Igor Sysoev <igor@sysoev.ru>
parents: 1309
diff changeset
49 /* "bool" conflicts with perl's CORE/handy.h */
939
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
50 #undef bool
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
51
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
52
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
53 #define NGX_HAVE_ATOMIC_OPS 1
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 #if (NGX_PTR_SIZE == 8)
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
56
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
57 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
58 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
59 #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
60
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
61 #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
62 OSAtomicCompareAndSwap64Barrier(old, new, (int64_t *) lock)
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_fetch_add(value, add) \
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
65 (OSAtomicAdd64(add, (int64_t *) value) - add)
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 #else
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
68
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
69 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
70 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
71 #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
72
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
73 #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
74 OSAtomicCompareAndSwap32Barrier(old, new, (int32_t *) lock)
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_fetch_add(value, add) \
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
77 (OSAtomicAdd32(add, (int32_t *) value) - add)
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 #endif
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
80
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
81 #define ngx_memory_barrier() OSMemoryBarrier()
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
82
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
83 #define ngx_cpu_pause()
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
84
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
85 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
86
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
87
3362
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
88 #elif (NGX_HAVE_GCC_ATOMIC)
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
89
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
90 /* GCC 4.1 builtin atomic operations */
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
91
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
92 #define NGX_HAVE_ATOMIC_OPS 1
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
93
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
94 typedef long ngx_atomic_int_t;
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
95 typedef unsigned long ngx_atomic_uint_t;
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 #if (NGX_PTR_SIZE == 8)
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
98 #define NGX_ATOMIC_T_LEN (sizeof("-9223372036854775808") - 1)
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
99 #else
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
100 #define NGX_ATOMIC_T_LEN (sizeof("-2147483648") - 1)
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
101 #endif
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
102
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
103 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
104
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
105
3362
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
106 #define ngx_atomic_cmp_set(lock, old, set) \
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
107 __sync_bool_compare_and_swap(lock, old, set)
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
108
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
109 #define ngx_atomic_fetch_add(value, add) \
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
110 __sync_fetch_and_add(value, add)
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_memory_barrier() __sync_synchronize()
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
113
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
114 #if ( __i386__ || __i386 || __amd64__ || __amd64 )
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
115 #define ngx_cpu_pause() __asm__ ("pause")
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
116 #else
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
117 #define ngx_cpu_pause()
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
118 #endif
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
119
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
120
b57a4a704f3c GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents: 3165
diff changeset
121 #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
122
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
123 typedef int32_t ngx_atomic_int_t;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
124 typedef uint32_t ngx_atomic_uint_t;
495
fc9909c369b2 nginx-0.1.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
125 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
126 #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
127
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
128
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
129 #if ( __SUNPRO_C )
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
130
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
131 #define NGX_HAVE_ATOMIC_OPS 1
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
132
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
133 ngx_atomic_uint_t
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
134 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
135 ngx_atomic_uint_t set);
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
136
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
137 ngx_atomic_int_t
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
138 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
139
1309
08c6ee7a1b11 Sun Studio 12 compatibility
Igor Sysoev <igor@sysoev.ru>
parents: 1308
diff changeset
140 /*
08c6ee7a1b11 Sun Studio 12 compatibility
Igor Sysoev <igor@sysoev.ru>
parents: 1308
diff changeset
141 * Sun Studio 12 exits with segmentation fault on '__asm ("pause")',
08c6ee7a1b11 Sun Studio 12 compatibility
Igor Sysoev <igor@sysoev.ru>
parents: 1308
diff changeset
142 * 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
143 */
08c6ee7a1b11 Sun Studio 12 compatibility
Igor Sysoev <igor@sysoev.ru>
parents: 1308
diff changeset
144
08c6ee7a1b11 Sun Studio 12 compatibility
Igor Sysoev <igor@sysoev.ru>
parents: 1308
diff changeset
145 void
08c6ee7a1b11 Sun Studio 12 compatibility
Igor Sysoev <igor@sysoev.ru>
parents: 1308
diff changeset
146 ngx_cpu_pause(void);
08c6ee7a1b11 Sun Studio 12 compatibility
Igor Sysoev <igor@sysoev.ru>
parents: 1308
diff changeset
147
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
148 /* 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
149
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
150 #define ngx_memory_barrier() __asm (".volatile"); __asm (".nonvolatile")
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
151
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
152
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
153 #else /* ( __GNUC__ || __INTEL_COMPILER ) */
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
154
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
155 #define NGX_HAVE_ATOMIC_OPS 1
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
156
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
157 #include "ngx_gcc_atomic_x86.h"
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
158
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
159 #endif
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
160
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
161
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
162 #elif ( __amd64__ || __amd64 )
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
163
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
164 typedef int64_t ngx_atomic_int_t;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
165 typedef uint64_t ngx_atomic_uint_t;
495
fc9909c369b2 nginx-0.1.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
166 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
167 #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
168
5238e93961a1 nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 213
diff changeset
169
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
170 #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
171
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
172 #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
173
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
174 ngx_atomic_uint_t
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
175 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
176 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
177
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
178 ngx_atomic_int_t
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
179 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
180
1309
08c6ee7a1b11 Sun Studio 12 compatibility
Igor Sysoev <igor@sysoev.ru>
parents: 1308
diff changeset
181 /*
08c6ee7a1b11 Sun Studio 12 compatibility
Igor Sysoev <igor@sysoev.ru>
parents: 1308
diff changeset
182 * Sun Studio 12 exits with segmentation fault on '__asm ("pause")',
08c6ee7a1b11 Sun Studio 12 compatibility
Igor Sysoev <igor@sysoev.ru>
parents: 1308
diff changeset
183 * 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
184 */
08c6ee7a1b11 Sun Studio 12 compatibility
Igor Sysoev <igor@sysoev.ru>
parents: 1308
diff changeset
185
08c6ee7a1b11 Sun Studio 12 compatibility
Igor Sysoev <igor@sysoev.ru>
parents: 1308
diff changeset
186 void
08c6ee7a1b11 Sun Studio 12 compatibility
Igor Sysoev <igor@sysoev.ru>
parents: 1308
diff changeset
187 ngx_cpu_pause(void);
08c6ee7a1b11 Sun Studio 12 compatibility
Igor Sysoev <igor@sysoev.ru>
parents: 1308
diff changeset
188
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
189 /* 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
190
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
191 #define ngx_memory_barrier() __asm (".volatile"); __asm (".nonvolatile")
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
192
435
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 433
diff changeset
193
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
194 #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
195
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
196 #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
197
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
198 #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
199
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
200 #endif
266
5238e93961a1 nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 213
diff changeset
201
301
744965ec6275 nginx-0.0.3-2004-03-31-19:26:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 300
diff changeset
202
1308
63fa39cf8bd0 --with-cpu-opt=sparc32 and --with-cpu-opt=sparc64
Igor Sysoev <igor@sysoev.ru>
parents: 940
diff changeset
203 #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
204
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
205 #if (NGX_PTR_SIZE == 8)
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
206
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
207 typedef int64_t ngx_atomic_int_t;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
208 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
209 #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
210
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
211 #else
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
212
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
213 typedef int32_t ngx_atomic_int_t;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
214 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
215 #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
216
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
217 #endif
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
218
495
fc9909c369b2 nginx-0.1.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
219 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
220
bd39260a1383 nginx-0.0.10-2004-09-14-19:55:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 373
diff changeset
221
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
222 #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
223
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
224 #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
225
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
226 #include "ngx_sunpro_atomic_sparc64.h"
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
227
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 #else /* ( __GNUC__ || __INTEL_COMPILER ) */
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
230
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
231 #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
232
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
233 #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
234
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
235 #endif
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
236
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
237
613
c73c5c58c619 nginx-0.3.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
238 #elif ( __powerpc__ || __POWERPC__ )
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 #define NGX_HAVE_ATOMIC_OPS 1
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
241
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
242 #if (NGX_PTR_SIZE == 8)
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
243
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
244 typedef int64_t ngx_atomic_int_t;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
245 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
246 #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
247
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
248 #else
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
249
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
250 typedef int32_t ngx_atomic_int_t;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
251 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
252 #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
253
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
254 #endif
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
255
495
fc9909c369b2 nginx-0.1.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
256 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
257
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
258
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
259 #include "ngx_gcc_atomic_ppc.h"
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
260
939
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
261 #endif
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
262
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
263
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
264 #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
265
435
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 433
diff changeset
266 #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
267
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
268 typedef int32_t ngx_atomic_int_t;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
269 typedef uint32_t ngx_atomic_uint_t;
495
fc9909c369b2 nginx-0.1.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
270 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
271 #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
272
435
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 433
diff changeset
273
495
fc9909c369b2 nginx-0.1.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
274 static ngx_inline ngx_atomic_uint_t
fc9909c369b2 nginx-0.1.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
275 ngx_atomic_cmp_set(ngx_atomic_t *lock, ngx_atomic_uint_t old,
fc9909c369b2 nginx-0.1.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
276 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
277 {
571
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
278 if (*lock == old) {
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
279 *lock = set;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
280 return 1;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
281 }
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
282
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
283 return 0;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
284 }
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
285
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
286
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
287 static ngx_inline ngx_atomic_int_t
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
288 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
289 {
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
290 ngx_atomic_int_t old;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
291
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
292 old = *value;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
293 *value += add;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
294
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
295 return old;
435
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 433
diff changeset
296 }
266
5238e93961a1 nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 213
diff changeset
297
571
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
298 #define ngx_memory_barrier()
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
299 #define ngx_cpu_pause()
571
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
300
266
5238e93961a1 nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 213
diff changeset
301 #endif
212
679f60139863 nginx-0.0.1-2003-12-19-11:15:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
302
939
782cf4c13b8d use MacOSX atomic(3) and barrier(3) operations
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
303
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
304 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
305
371
780e93985b93 nginx-0.0.7-2004-06-28-20:05:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 370
diff changeset
306 #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
307 #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
308
54f76b0b8dca nginx-0.0.7-2004-06-27-22:01:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 302
diff changeset
309
212
679f60139863 nginx-0.0.1-2003-12-19-11:15:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
310 #endif /* _NGX_ATOMIC_H_INCLUDED_ */