︙ | | | ︙ | |
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
|
{
#if defined(OF_HAVE_PTHREADS)
return !pthread_cond_wait(condition, mutex);
#elif defined(_WIN32)
if (!of_mutex_unlock(mutex))
return false;
of_atomic_inc_int(&condition->count);
if (WaitForSingleObject(condition->event, INFINITE) != WAIT_OBJECT_0) {
of_mutex_lock(mutex);
return false;
}
of_atomic_dec_int(&condition->count);
if (!of_mutex_lock(mutex))
return false;
return true;
#else
# error of_condition_wait not implemented!
|
|
|
|
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
|
{
#if defined(OF_HAVE_PTHREADS)
return !pthread_cond_wait(condition, mutex);
#elif defined(_WIN32)
if (!of_mutex_unlock(mutex))
return false;
of_atomic_int_inc(&condition->count);
if (WaitForSingleObject(condition->event, INFINITE) != WAIT_OBJECT_0) {
of_mutex_lock(mutex);
return false;
}
of_atomic_int_dec(&condition->count);
if (!of_mutex_lock(mutex))
return false;
return true;
#else
# error of_condition_wait not implemented!
|
︙ | | | ︙ | |
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
|
ts.tv_nsec = lrint((timeout - ts.tv_sec) * 1000000000);
return !pthread_cond_timedwait(condition, mutex, &ts);
#elif defined(_WIN32)
if (!of_mutex_unlock(mutex))
return false;
of_atomic_inc_int(&condition->count);
if (WaitForSingleObject(condition->event,
timeout * 1000) != WAIT_OBJECT_0) {
of_mutex_lock(mutex);
return false;
}
of_atomic_dec_int(&condition->count);
if (!of_mutex_lock(mutex))
return false;
return true;
#else
# error of_condition_timed_wait not implemented!
|
|
|
|
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
|
ts.tv_nsec = lrint((timeout - ts.tv_sec) * 1000000000);
return !pthread_cond_timedwait(condition, mutex, &ts);
#elif defined(_WIN32)
if (!of_mutex_unlock(mutex))
return false;
of_atomic_int_inc(&condition->count);
if (WaitForSingleObject(condition->event,
timeout * 1000) != WAIT_OBJECT_0) {
of_mutex_lock(mutex);
return false;
}
of_atomic_int_dec(&condition->count);
if (!of_mutex_lock(mutex))
return false;
return true;
#else
# error of_condition_timed_wait not implemented!
|
︙ | | | ︙ | |
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
|
#endif
}
static OF_INLINE bool
of_spinlock_trylock(of_spinlock_t *spinlock)
{
#if defined(OF_HAVE_ATOMIC_OPS)
return of_atomic_cmpswap_int(spinlock, 0, 1);
#elif defined(OF_HAVE_PTHREAD_SPINLOCKS)
return !pthread_spin_trylock(spinlock);
#else
return of_mutex_trylock(spinlock);
#endif
}
|
|
|
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
|
#endif
}
static OF_INLINE bool
of_spinlock_trylock(of_spinlock_t *spinlock)
{
#if defined(OF_HAVE_ATOMIC_OPS)
return of_atomic_int_cmpswap(spinlock, 0, 1);
#elif defined(OF_HAVE_PTHREAD_SPINLOCKS)
return !pthread_spin_trylock(spinlock);
#else
return of_mutex_trylock(spinlock);
#endif
}
|
︙ | | | ︙ | |
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
|
#endif
}
static OF_INLINE bool
of_spinlock_unlock(of_spinlock_t *spinlock)
{
#if defined(OF_HAVE_ATOMIC_OPS)
return of_atomic_cmpswap_int(spinlock, 1, 0);
#elif defined(OF_HAVE_PTHREAD_SPINLOCKS)
return !pthread_spin_unlock(spinlock);
#else
return of_mutex_unlock(spinlock);
#endif
}
|
|
|
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
|
#endif
}
static OF_INLINE bool
of_spinlock_unlock(of_spinlock_t *spinlock)
{
#if defined(OF_HAVE_ATOMIC_OPS)
return of_atomic_int_cmpswap(spinlock, 1, 0);
#elif defined(OF_HAVE_PTHREAD_SPINLOCKS)
return !pthread_spin_unlock(spinlock);
#else
return of_mutex_unlock(spinlock);
#endif
}
|
︙ | | | ︙ | |