Lines 73-79
APR_DECLARE(apr_status_t) apr_atomic_ini
Link Here
|
73 |
return APR_SUCCESS; |
73 |
return APR_SUCCESS; |
74 |
} |
74 |
} |
75 |
|
75 |
|
76 |
static APR_INLINE apr_thread_mutex_t *mutex_hash(volatile apr_uint32_t *mem) |
76 |
static APR_INLINE apr_thread_mutex_t *mutex_hash(apr_uint32_t *mem) |
77 |
{ |
77 |
{ |
78 |
apr_thread_mutex_t *mutex = hash_mutex[ATOMIC_HASH(mem)]; |
78 |
apr_thread_mutex_t *mutex = hash_mutex[ATOMIC_HASH(mem)]; |
79 |
|
79 |
|
Lines 93-104
APR_DECLARE(apr_status_t) apr_atomic_ini
Link Here
|
93 |
|
93 |
|
94 |
#endif /* APR_HAS_THREADS */ |
94 |
#endif /* APR_HAS_THREADS */ |
95 |
|
95 |
|
96 |
APR_DECLARE(apr_uint32_t) apr_atomic_read32(volatile apr_uint32_t *mem) |
96 |
APR_DECLARE(apr_uint32_t) apr_atomic_read32(apr_uint32_t *mem) |
97 |
{ |
97 |
{ |
98 |
return *mem; |
98 |
return *mem; |
99 |
} |
99 |
} |
100 |
|
100 |
|
101 |
APR_DECLARE(void) apr_atomic_set32(volatile apr_uint32_t *mem, apr_uint32_t val) |
101 |
APR_DECLARE(void) apr_atomic_set32(apr_uint32_t *mem, apr_uint32_t val) |
102 |
{ |
102 |
{ |
103 |
DECLARE_MUTEX_LOCKED(mutex, mem); |
103 |
DECLARE_MUTEX_LOCKED(mutex, mem); |
104 |
|
104 |
|
Lines 107-113
APR_DECLARE(void) apr_atomic_set32(volat
Link Here
|
107 |
MUTEX_UNLOCK(mutex); |
107 |
MUTEX_UNLOCK(mutex); |
108 |
} |
108 |
} |
109 |
|
109 |
|
110 |
APR_DECLARE(apr_uint32_t) apr_atomic_add32(volatile apr_uint32_t *mem, apr_uint32_t val) |
110 |
APR_DECLARE(apr_uint32_t) apr_atomic_add32(apr_uint32_t *mem, apr_uint32_t val) |
111 |
{ |
111 |
{ |
112 |
apr_uint32_t old_value; |
112 |
apr_uint32_t old_value; |
113 |
DECLARE_MUTEX_LOCKED(mutex, mem); |
113 |
DECLARE_MUTEX_LOCKED(mutex, mem); |
Lines 120-138
APR_DECLARE(apr_uint32_t) apr_atomic_add
Link Here
|
120 |
return old_value; |
120 |
return old_value; |
121 |
} |
121 |
} |
122 |
|
122 |
|
123 |
APR_DECLARE(void) apr_atomic_sub32(volatile apr_uint32_t *mem, apr_uint32_t val) |
123 |
APR_DECLARE(void) apr_atomic_sub32(apr_uint32_t *mem, apr_uint32_t val) |
124 |
{ |
124 |
{ |
125 |
DECLARE_MUTEX_LOCKED(mutex, mem); |
125 |
DECLARE_MUTEX_LOCKED(mutex, mem); |
126 |
*mem -= val; |
126 |
*mem -= val; |
127 |
MUTEX_UNLOCK(mutex); |
127 |
MUTEX_UNLOCK(mutex); |
128 |
} |
128 |
} |
129 |
|
129 |
|
130 |
APR_DECLARE(apr_uint32_t) apr_atomic_inc32(volatile apr_uint32_t *mem) |
130 |
APR_DECLARE(apr_uint32_t) apr_atomic_inc32(apr_uint32_t *mem) |
131 |
{ |
131 |
{ |
132 |
return apr_atomic_add32(mem, 1); |
132 |
return apr_atomic_add32(mem, 1); |
133 |
} |
133 |
} |
134 |
|
134 |
|
135 |
APR_DECLARE(int) apr_atomic_dec32(volatile apr_uint32_t *mem) |
135 |
APR_DECLARE(int) apr_atomic_dec32(apr_uint32_t *mem) |
136 |
{ |
136 |
{ |
137 |
apr_uint32_t new; |
137 |
apr_uint32_t new; |
138 |
DECLARE_MUTEX_LOCKED(mutex, mem); |
138 |
DECLARE_MUTEX_LOCKED(mutex, mem); |
Lines 145-152
APR_DECLARE(int) apr_atomic_dec32(volati
Link Here
|
145 |
return new; |
145 |
return new; |
146 |
} |
146 |
} |
147 |
|
147 |
|
148 |
APR_DECLARE(apr_uint32_t) apr_atomic_cas32(volatile apr_uint32_t *mem, apr_uint32_t with, |
148 |
APR_DECLARE(apr_uint32_t) apr_atomic_cas32(apr_uint32_t *mem, apr_uint32_t with, |
149 |
apr_uint32_t cmp) |
149 |
apr_uint32_t cmp) |
150 |
{ |
150 |
{ |
151 |
apr_uint32_t prev; |
151 |
apr_uint32_t prev; |
152 |
DECLARE_MUTEX_LOCKED(mutex, mem); |
152 |
DECLARE_MUTEX_LOCKED(mutex, mem); |
Lines 161-167
APR_DECLARE(apr_uint32_t) apr_atomic_cas
Link Here
|
161 |
return prev; |
161 |
return prev; |
162 |
} |
162 |
} |
163 |
|
163 |
|
164 |
APR_DECLARE(apr_uint32_t) apr_atomic_xchg32(volatile apr_uint32_t *mem, apr_uint32_t val) |
164 |
APR_DECLARE(apr_uint32_t) apr_atomic_xchg32(apr_uint32_t *mem, apr_uint32_t val) |
165 |
{ |
165 |
{ |
166 |
apr_uint32_t prev; |
166 |
apr_uint32_t prev; |
167 |
DECLARE_MUTEX_LOCKED(mutex, mem); |
167 |
DECLARE_MUTEX_LOCKED(mutex, mem); |
Lines 174-180
APR_DECLARE(apr_uint32_t) apr_atomic_xch
Link Here
|
174 |
return prev; |
174 |
return prev; |
175 |
} |
175 |
} |
176 |
|
176 |
|
177 |
APR_DECLARE(void*) apr_atomic_casptr(volatile void **mem, void *with, const void *cmp) |
177 |
APR_DECLARE(void*) apr_atomic_casptr(void **mem, void *with, void *cmp) |
178 |
{ |
178 |
{ |
179 |
void *prev; |
179 |
void *prev; |
180 |
DECLARE_MUTEX_LOCKED(mutex, *mem); |
180 |
DECLARE_MUTEX_LOCKED(mutex, *mem); |