modernc.org/cc@v1.0.1/v2/testdata/_sqlite/ext/lsm1/lsm_mutex.c (about) 1 /* 2 ** 2012-01-30 3 ** 4 ** The author disclaims copyright to this source code. In place of 5 ** a legal notice, here is a blessing: 6 ** 7 ** May you do good and not evil. 8 ** May you find forgiveness for yourself and forgive others. 9 ** May you share freely, never taking more than you give. 10 ** 11 ************************************************************************* 12 ** 13 ** Mutex functions for LSM. 14 */ 15 #include "lsmInt.h" 16 17 /* 18 ** Allocate a new mutex. 19 */ 20 int lsmMutexNew(lsm_env *pEnv, lsm_mutex **ppNew){ 21 return pEnv->xMutexNew(pEnv, ppNew); 22 } 23 24 /* 25 ** Return a handle for one of the static mutexes. 26 */ 27 int lsmMutexStatic(lsm_env *pEnv, int iMutex, lsm_mutex **ppStatic){ 28 return pEnv->xMutexStatic(pEnv, iMutex, ppStatic); 29 } 30 31 /* 32 ** Free a mutex allocated by lsmMutexNew(). 33 */ 34 void lsmMutexDel(lsm_env *pEnv, lsm_mutex *pMutex){ 35 if( pMutex ) pEnv->xMutexDel(pMutex); 36 } 37 38 /* 39 ** Enter a mutex. 40 */ 41 void lsmMutexEnter(lsm_env *pEnv, lsm_mutex *pMutex){ 42 pEnv->xMutexEnter(pMutex); 43 } 44 45 /* 46 ** Attempt to enter a mutex, but do not block. If successful, return zero. 47 ** Otherwise, if the mutex is already held by some other thread and is not 48 ** entered, return non zero. 49 ** 50 ** Each successful call to this function must be matched by a call to 51 ** lsmMutexLeave(). 52 */ 53 int lsmMutexTry(lsm_env *pEnv, lsm_mutex *pMutex){ 54 return pEnv->xMutexTry(pMutex); 55 } 56 57 /* 58 ** Leave a mutex. 59 */ 60 void lsmMutexLeave(lsm_env *pEnv, lsm_mutex *pMutex){ 61 pEnv->xMutexLeave(pMutex); 62 } 63 64 #ifndef NDEBUG 65 /* 66 ** Return non-zero if the mutex passed as the second argument is held 67 ** by the calling thread, or zero otherwise. If the implementation is not 68 ** able to tell if the mutex is held by the caller, it should return 69 ** non-zero. 70 ** 71 ** This function is only used as part of assert() statements. 72 */ 73 int lsmMutexHeld(lsm_env *pEnv, lsm_mutex *pMutex){ 74 return pEnv->xMutexHeld ? pEnv->xMutexHeld(pMutex) : 1; 75 } 76 77 /* 78 ** Return non-zero if the mutex passed as the second argument is not 79 ** held by the calling thread, or zero otherwise. If the implementation 80 ** is not able to tell if the mutex is held by the caller, it should 81 ** return non-zero. 82 ** 83 ** This function is only used as part of assert() statements. 84 */ 85 int lsmMutexNotHeld(lsm_env *pEnv, lsm_mutex *pMutex){ 86 return pEnv->xMutexNotHeld ? pEnv->xMutexNotHeld(pMutex) : 1; 87 } 88 #endif