|
1 |
| -/* $OpenBSD: rthread_libc.c,v 1.6 2025/07/14 06:48:10 dlg Exp $ */ |
| 1 | +/* $OpenBSD: rthread_libc.c,v 1.7 2025/08/02 11:17:00 dlg Exp $ */ |
2 | 2 |
|
3 | 3 | /* PUBLIC DOMAIN: No Rights Reserved. Marco S Hyman <[email protected]> */
|
4 | 4 |
|
@@ -152,9 +152,24 @@ _thread_mutex_destroy(void **mutex)
|
152 | 152 | /*
|
153 | 153 | * the malloc lock
|
154 | 154 | */
|
155 |
| -#define MALLOC_LOCK_INITIALIZER(n) __CMTX_INITIALIZER() |
156 |
| - |
157 |
| -static struct __cmtx malloc_lock[_MALLOC_MUTEXES] = { |
| 155 | +#ifndef FUTEX |
| 156 | +#define MALLOC_LOCK_INITIALIZER(n) { \ |
| 157 | + _SPINLOCK_UNLOCKED, \ |
| 158 | + TAILQ_HEAD_INITIALIZER(malloc_lock[n].lockers), \ |
| 159 | + PTHREAD_MUTEX_DEFAULT, \ |
| 160 | + NULL, \ |
| 161 | + 0, \ |
| 162 | + -1 } |
| 163 | +#else |
| 164 | +#define MALLOC_LOCK_INITIALIZER(n) { \ |
| 165 | + _SPINLOCK_UNLOCKED, \ |
| 166 | + PTHREAD_MUTEX_DEFAULT, \ |
| 167 | + NULL, \ |
| 168 | + 0, \ |
| 169 | + -1 } |
| 170 | +#endif |
| 171 | + |
| 172 | +static struct pthread_mutex malloc_lock[_MALLOC_MUTEXES] = { |
158 | 173 | MALLOC_LOCK_INITIALIZER(0),
|
159 | 174 | MALLOC_LOCK_INITIALIZER(1),
|
160 | 175 | MALLOC_LOCK_INITIALIZER(2),
|
@@ -189,25 +204,66 @@ static struct __cmtx malloc_lock[_MALLOC_MUTEXES] = {
|
189 | 204 | MALLOC_LOCK_INITIALIZER(31)
|
190 | 205 | };
|
191 | 206 |
|
| 207 | +static pthread_mutex_t malloc_mutex[_MALLOC_MUTEXES] = { |
| 208 | + &malloc_lock[0], |
| 209 | + &malloc_lock[1], |
| 210 | + &malloc_lock[2], |
| 211 | + &malloc_lock[3], |
| 212 | + &malloc_lock[4], |
| 213 | + &malloc_lock[5], |
| 214 | + &malloc_lock[6], |
| 215 | + &malloc_lock[7], |
| 216 | + &malloc_lock[8], |
| 217 | + &malloc_lock[9], |
| 218 | + &malloc_lock[10], |
| 219 | + &malloc_lock[11], |
| 220 | + &malloc_lock[12], |
| 221 | + &malloc_lock[13], |
| 222 | + &malloc_lock[14], |
| 223 | + &malloc_lock[15], |
| 224 | + &malloc_lock[16], |
| 225 | + &malloc_lock[17], |
| 226 | + &malloc_lock[18], |
| 227 | + &malloc_lock[19], |
| 228 | + &malloc_lock[20], |
| 229 | + &malloc_lock[21], |
| 230 | + &malloc_lock[22], |
| 231 | + &malloc_lock[23], |
| 232 | + &malloc_lock[24], |
| 233 | + &malloc_lock[25], |
| 234 | + &malloc_lock[26], |
| 235 | + &malloc_lock[27], |
| 236 | + &malloc_lock[28], |
| 237 | + &malloc_lock[29], |
| 238 | + &malloc_lock[30], |
| 239 | + &malloc_lock[31] |
| 240 | +}; |
| 241 | + |
192 | 242 | void
|
193 | 243 | _thread_malloc_lock(int i)
|
194 | 244 | {
|
195 |
| - __cmtx_enter(&malloc_lock[i]); |
| 245 | + pthread_mutex_lock(&malloc_mutex[i]); |
196 | 246 | }
|
197 | 247 |
|
198 | 248 | void
|
199 | 249 | _thread_malloc_unlock(int i)
|
200 | 250 | {
|
201 |
| - __cmtx_leave(&malloc_lock[i]); |
| 251 | + pthread_mutex_unlock(&malloc_mutex[i]); |
202 | 252 | }
|
203 | 253 |
|
204 | 254 | static void
|
205 | 255 | _thread_malloc_reinit(void)
|
206 | 256 | {
|
207 | 257 | int i;
|
208 | 258 |
|
209 |
| - for (i = 0; i < _MALLOC_MUTEXES; i++) |
210 |
| - __cmtx_init(&malloc_lock[i]); |
| 259 | + for (i = 0; i < _MALLOC_MUTEXES; i++) { |
| 260 | + malloc_lock[i].lock = _SPINLOCK_UNLOCKED; |
| 261 | +#ifndef FUTEX |
| 262 | + TAILQ_INIT(&malloc_lock[i].lockers); |
| 263 | +#endif |
| 264 | + malloc_lock[i].owner = NULL; |
| 265 | + malloc_lock[i].count = 0; |
| 266 | + } |
211 | 267 | }
|
212 | 268 |
|
213 | 269 | /*
|
|
0 commit comments