aboutsummaryrefslogtreecommitdiff
path: root/src/os_unix.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/os_unix.c')
-rw-r--r--src/os_unix.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/os_unix.c b/src/os_unix.c
index 483978673..f37afa1f1 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -5140,7 +5140,10 @@ static int unixShmGet(
unixShmFile *pFile = p->pFile;
int rc = SQLITE_OK;
- sqlite3_mutex_enter(pFile->mutexBuf);
+ if( p->lockState!=SQLITE_SHM_CHECKPOINT ){
+ sqlite3_mutex_enter(pFile->mutexBuf);
+ p->hasMutexBuf = 1;
+ }
sqlite3_mutex_enter(pFile->mutex);
if( pFile->szMap==0 || reqMapSize>pFile->szMap ){
int actualSize;
@@ -5168,8 +5171,11 @@ static int unixShmGet(
*/
static int unixShmRelease(sqlite3_shm *pSharedMem){
unixShm *p = (unixShm*)pSharedMem;
- unixShmFile *pFile = p->pFile;
- sqlite3_mutex_leave(pFile->mutexBuf);
+ if( p->hasMutexBuf ){
+ unixShmFile *pFile = p->pFile;
+ sqlite3_mutex_leave(pFile->mutexBuf);
+ p->hasMutexBuf = 0;
+ }
return SQLITE_OK;
}