mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-27 20:41:58 +03:00
Import the LSM code from SQLite4 for use in an experimental virtual table.
NB: This is a speculative experiment and could easily result in a dead-end branch. FossilOrigin-Name: 3d930501a2acb7f20932cfeb4e3fe308b4569cd6
This commit is contained in:
88
ext/lsm1/lsm_mutex.c
Normal file
88
ext/lsm1/lsm_mutex.c
Normal file
@ -0,0 +1,88 @@
|
||||
/*
|
||||
** 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
|
Reference in New Issue
Block a user