| /* |
| ** 2012-01-30 |
| ** |
| ** The author disclaims copyright to this source code. In place of |
| ** a legal notice, here is a blessing: |
| ** |
| ** May you do good and not evil. |
| ** May you find forgiveness for yourself and forgive others. |
| ** May you share freely, never taking more than you give. |
| ** |
| ************************************************************************* |
| ** |
| ** Mutex functions for LSM. |
| */ |
| #include "lsmInt.h" |
| |
| /* |
| ** Allocate a new mutex. |
| */ |
| int lsmMutexNew(lsm_env *pEnv, lsm_mutex **ppNew){ |
| return pEnv->xMutexNew(pEnv, ppNew); |
| } |
| |
| /* |
| ** Return a handle for one of the static mutexes. |
| */ |
| int lsmMutexStatic(lsm_env *pEnv, int iMutex, lsm_mutex **ppStatic){ |
| return pEnv->xMutexStatic(pEnv, iMutex, ppStatic); |
| } |
| |
| /* |
| ** Free a mutex allocated by lsmMutexNew(). |
| */ |
| void lsmMutexDel(lsm_env *pEnv, lsm_mutex *pMutex){ |
| if( pMutex ) pEnv->xMutexDel(pMutex); |
| } |
| |
| /* |
| ** Enter a mutex. |
| */ |
| void lsmMutexEnter(lsm_env *pEnv, lsm_mutex *pMutex){ |
| pEnv->xMutexEnter(pMutex); |
| } |
| |
| /* |
| ** Attempt to enter a mutex, but do not block. If successful, return zero. |
| ** Otherwise, if the mutex is already held by some other thread and is not |
| ** entered, return non zero. |
| ** |
| ** Each successful call to this function must be matched by a call to |
| ** lsmMutexLeave(). |
| */ |
| int lsmMutexTry(lsm_env *pEnv, lsm_mutex *pMutex){ |
| return pEnv->xMutexTry(pMutex); |
| } |
| |
| /* |
| ** Leave a mutex. |
| */ |
| void lsmMutexLeave(lsm_env *pEnv, lsm_mutex *pMutex){ |
| pEnv->xMutexLeave(pMutex); |
| } |
| |
| #ifndef NDEBUG |
| /* |
| ** Return non-zero if the mutex passed as the second argument is held |
| ** by the calling thread, or zero otherwise. If the implementation is not |
| ** able to tell if the mutex is held by the caller, it should return |
| ** non-zero. |
| ** |
| ** This function is only used as part of assert() statements. |
| */ |
| int lsmMutexHeld(lsm_env *pEnv, lsm_mutex *pMutex){ |
| return pEnv->xMutexHeld ? pEnv->xMutexHeld(pMutex) : 1; |
| } |
| |
| /* |
| ** Return non-zero if the mutex passed as the second argument is not |
| ** held by the calling thread, or zero otherwise. If the implementation |
| ** is not able to tell if the mutex is held by the caller, it should |
| ** return non-zero. |
| ** |
| ** This function is only used as part of assert() statements. |
| */ |
| int lsmMutexNotHeld(lsm_env *pEnv, lsm_mutex *pMutex){ |
| return pEnv->xMutexNotHeld ? pEnv->xMutexNotHeld(pMutex) : 1; |
| } |
| #endif |