mirror of
https://github.com/sqlite/sqlite.git
synced 2025-12-21 13:38:01 +03:00
Use a separate mutex (SQLITE_MUTEX_STATIC_VFS2) for the VxWorks file list
in os_unix.c. FossilOrigin-Name: 8f45f1a9d9208fbf124c4087092718b83cd653126bc1ed5f388e3577561f615b
This commit is contained in:
@@ -760,9 +760,8 @@ static int robust_open(const char *z, int f, mode_t m){
|
||||
|
||||
/*
|
||||
** Helper functions to obtain and relinquish the global mutex. The
|
||||
** global mutex is used to protect the unixInodeInfo and
|
||||
** vxworksFileId objects used by this file, all of which may be
|
||||
** shared by multiple threads.
|
||||
** global mutex is used to protect the unixInodeInfo objects used by
|
||||
** this file, all of which may be shared by multiple threads.
|
||||
**
|
||||
** Function unixMutexHeld() is used to assert() that the global mutex
|
||||
** is held when required. This function is only used as part of assert()
|
||||
@@ -964,6 +963,7 @@ struct vxworksFileId {
|
||||
** variable:
|
||||
*/
|
||||
static struct vxworksFileId *vxworksFileList = 0;
|
||||
static sqlite3_mutex *vxworksMutex = 0;
|
||||
|
||||
/*
|
||||
** Simplify a filename into its canonical form
|
||||
@@ -1029,14 +1029,14 @@ static struct vxworksFileId *vxworksFindFileId(const char *zAbsoluteName){
|
||||
** If found, increment the reference count and return a pointer to
|
||||
** the existing file ID.
|
||||
*/
|
||||
unixEnterMutex();
|
||||
sqlite3_mutex_enter(vxworksMutex);
|
||||
for(pCandidate=vxworksFileList; pCandidate; pCandidate=pCandidate->pNext){
|
||||
if( pCandidate->nName==n
|
||||
&& memcmp(pCandidate->zCanonicalName, pNew->zCanonicalName, n)==0
|
||||
){
|
||||
sqlite3_free(pNew);
|
||||
pCandidate->nRef++;
|
||||
unixLeaveMutex();
|
||||
sqlite3_mutex_leave(vxworksMutex);
|
||||
return pCandidate;
|
||||
}
|
||||
}
|
||||
@@ -1046,7 +1046,7 @@ static struct vxworksFileId *vxworksFindFileId(const char *zAbsoluteName){
|
||||
pNew->nName = n;
|
||||
pNew->pNext = vxworksFileList;
|
||||
vxworksFileList = pNew;
|
||||
unixLeaveMutex();
|
||||
sqlite3_mutex_leave(vxworksMutex);
|
||||
return pNew;
|
||||
}
|
||||
|
||||
@@ -1055,7 +1055,7 @@ static struct vxworksFileId *vxworksFindFileId(const char *zAbsoluteName){
|
||||
** the object when the reference count reaches zero.
|
||||
*/
|
||||
static void vxworksReleaseFileId(struct vxworksFileId *pId){
|
||||
unixEnterMutex();
|
||||
sqlite3_mutex_enter(vxworksMutex);
|
||||
assert( pId->nRef>0 );
|
||||
pId->nRef--;
|
||||
if( pId->nRef==0 ){
|
||||
@@ -1065,7 +1065,7 @@ static void vxworksReleaseFileId(struct vxworksFileId *pId){
|
||||
*pp = pId->pNext;
|
||||
sqlite3_free(pId);
|
||||
}
|
||||
unixLeaveMutex();
|
||||
sqlite3_mutex_leave(vxworksMutex);
|
||||
}
|
||||
#endif /* OS_VXWORKS */
|
||||
/*************** End of Unique File ID Utility Used By VxWorks ****************
|
||||
@@ -8292,6 +8292,9 @@ int sqlite3_os_init(void){
|
||||
sqlite3KvvfsInit();
|
||||
#endif
|
||||
unixBigLock = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_VFS1);
|
||||
#if OS_VXWORKS
|
||||
vxworksMutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_VFS2);
|
||||
#endif
|
||||
|
||||
#ifndef SQLITE_OMIT_WAL
|
||||
/* Validate lock assumptions */
|
||||
@@ -8326,6 +8329,9 @@ int sqlite3_os_init(void){
|
||||
*/
|
||||
int sqlite3_os_end(void){
|
||||
unixBigLock = 0;
|
||||
#if OS_VXWORKS
|
||||
vxworksMutex = 0;
|
||||
#endif
|
||||
return SQLITE_OK;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user