From 73ba4006bd6e2a7cf66b6cfd24b972095dd514eb Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Mon, 25 Jun 2018 15:15:29 -0400 Subject: [PATCH] eina/lock: reorder inline posix lock functions Summary: no functional changes Reviewers: ManMower, devilhorns Reviewed By: devilhorns Subscribers: cedric, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D6374 --- src/lib/eina/eina_inline_lock_posix.x | 110 +++++++++++++------------- 1 file changed, 55 insertions(+), 55 deletions(-) diff --git a/src/lib/eina/eina_inline_lock_posix.x b/src/lib/eina/eina_inline_lock_posix.x index 9dd96ebb4e..8ae3f89566 100644 --- a/src/lib/eina/eina_inline_lock_posix.x +++ b/src/lib/eina/eina_inline_lock_posix.x @@ -197,6 +197,45 @@ eina_lock_free(Eina_Lock *mutex) _eina_lock_free(mutex); } +static inline Eina_Lock_Result +eina_lock_take_try(Eina_Lock *mutex) +{ + Eina_Lock_Result ret = EINA_LOCK_FAIL; + int ok; + +#ifdef EINA_HAVE_ON_OFF_THREADS + if (!_eina_threads_activated) + { + return EINA_LOCK_SUCCEED; + } +#endif + + ok = pthread_mutex_trylock(&(mutex->mutex)); + if (ok == 0) ret = EINA_LOCK_SUCCEED; + else if (ok == EDEADLK) + { + eina_lock_debug(mutex); + ret = EINA_LOCK_DEADLOCK; + } + else if (ok != EBUSY) EINA_LOCK_ABORT_DEBUG(ok, trylock, mutex); +#ifdef EINA_HAVE_DEBUG_THREADS + if (ret == EINA_LOCK_SUCCEED) + { + /* recursive locks can't make use of any of this */ + if (mutex->recursive) return ret; + mutex->locked = 1; + mutex->lock_thread_id = pthread_self(); + mutex->lock_bt_num = backtrace((void **)(mutex->lock_bt), EINA_LOCK_DEBUG_BT_NUM); + + pthread_mutex_lock(&_eina_tracking_lock); + _eina_tracking = eina_inlist_append(_eina_tracking, + EINA_INLIST_GET(mutex)); + pthread_mutex_unlock(&_eina_tracking_lock); + } +#endif + return ret; +} + static inline Eina_Lock_Result eina_lock_take(Eina_Lock *mutex) { @@ -264,45 +303,6 @@ eina_lock_take(Eina_Lock *mutex) return ret; } -static inline Eina_Lock_Result -eina_lock_take_try(Eina_Lock *mutex) -{ - Eina_Lock_Result ret = EINA_LOCK_FAIL; - int ok; - -#ifdef EINA_HAVE_ON_OFF_THREADS - if (!_eina_threads_activated) - { - return EINA_LOCK_SUCCEED; - } -#endif - - ok = pthread_mutex_trylock(&(mutex->mutex)); - if (ok == 0) ret = EINA_LOCK_SUCCEED; - else if (ok == EDEADLK) - { - eina_lock_debug(mutex); - ret = EINA_LOCK_DEADLOCK; - } - else if (ok != EBUSY) EINA_LOCK_ABORT_DEBUG(ok, trylock, mutex); -#ifdef EINA_HAVE_DEBUG_THREADS - if (ret == EINA_LOCK_SUCCEED) - { - /* recursive locks can't make use of any of this */ - if (mutex->recursive) return ret; - mutex->locked = 1; - mutex->lock_thread_id = pthread_self(); - mutex->lock_bt_num = backtrace((void **)(mutex->lock_bt), EINA_LOCK_DEBUG_BT_NUM); - - pthread_mutex_lock(&_eina_tracking_lock); - _eina_tracking = eina_inlist_append(_eina_tracking, - EINA_INLIST_GET(mutex)); - pthread_mutex_unlock(&_eina_tracking_lock); - } -#endif - return ret; -} - static inline Eina_Lock_Result eina_lock_release(Eina_Lock *mutex) { @@ -632,6 +632,22 @@ eina_spinlock_free(Eina_Spinlock *spinlock) _eina_spinlock_free(spinlock); } +static inline Eina_Lock_Result +eina_spinlock_take_try(Eina_Spinlock *spinlock) +{ +#if defined(EINA_HAVE_POSIX_SPINLOCK) + int t = pthread_spin_trylock(spinlock); + if (t == 0) return EINA_LOCK_SUCCEED; + else if (t == EBUSY) return EINA_LOCK_FAIL; + else EINA_LOCK_ABORT_DEBUG(t, spin_trylock, spinlock); + return EINA_LOCK_FAIL; +#elif defined(EINA_HAVE_OSX_SPINLOCK) + return _eina_spinlock_macos_take_try(spinlock); +#else + return eina_lock_take_try(spinlock); +#endif +} + static inline Eina_Lock_Result eina_spinlock_take(Eina_Spinlock *spinlock) { @@ -653,22 +669,6 @@ eina_spinlock_take(Eina_Spinlock *spinlock) #endif } -static inline Eina_Lock_Result -eina_spinlock_take_try(Eina_Spinlock *spinlock) -{ -#if defined(EINA_HAVE_POSIX_SPINLOCK) - int t = pthread_spin_trylock(spinlock); - if (t == 0) return EINA_LOCK_SUCCEED; - else if (t == EBUSY) return EINA_LOCK_FAIL; - else EINA_LOCK_ABORT_DEBUG(t, spin_trylock, spinlock); - return EINA_LOCK_FAIL; -#elif defined(EINA_HAVE_OSX_SPINLOCK) - return _eina_spinlock_macos_take_try(spinlock); -#else - return eina_lock_take_try(spinlock); -#endif -} - static inline Eina_Lock_Result eina_spinlock_release(Eina_Spinlock *spinlock) {