internal bool removeFromSharingList() { #if !SQLITE_OMIT_SHARED_CACHE sqlite3_mutex pMaster; BtShared list; bool removed = false; Debug.Assert(MutexEx.sqlite3_mutex_notheld(Mutex)); pMaster = MutexEx.sqlite3MutexAlloc(MUTEX.STATIC_MASTER); MutexEx.sqlite3_mutex_enter(pMaster); nRef--; if (nRef <= 0) { if (SysEx.getGLOBAL <BtShared>(Btree.s_sqlite3SharedCacheList) == this) { SysEx.setGLOBAL <BtShared>(Btree.s_sqlite3SharedCacheList, Next); } else { list = SysEx.getGLOBAL <BtShared>(Btree.s_sqlite3SharedCacheList); while (Check.ALWAYS(list) != null && list.Next != this) { list = list.Next; } if (Check.ALWAYS(list) != null) { list.Next = Next; } } if (MutexEx.SQLITE_THREADSAFE) { MutexEx.sqlite3_mutex_free(Mutex); } removed = true; } MutexEx.sqlite3_mutex_leave(pMaster); return(removed); #else return(true); #endif }