private static PgHdr pcache1Alloc(int nByte) { PgHdr p = null; Debug.Assert(MutexEx.NotHeld(pcache1.grp.mutex)); StatusEx.sqlite3StatusSet(StatusEx.STATUS.PAGECACHE_SIZE, nByte); if (nByte <= pcache1.szSlot) { MutexEx.Enter(pcache1.mutex); p = pcache1.pFree._PgHdr; if (p != null) { pcache1.pFree = pcache1.pFree.pNext; pcache1.nFreeSlot--; pcache1.bUnderPressure = pcache1.nFreeSlot < pcache1.nReserve; Debug.Assert(pcache1.nFreeSlot >= 0); StatusEx.sqlite3StatusAdd(StatusEx.STATUS.PAGECACHE_USED, 1); } MutexEx.Leave(pcache1.mutex); } if (p == null) { // Memory is not available in the SQLITE_CONFIG_PAGECACHE pool. Get it from sqlite3Malloc instead. p = new PgHdr(); { var sz = nByte; MutexEx.Enter(pcache1.mutex); StatusEx.sqlite3StatusAdd(StatusEx.STATUS.PAGECACHE_OVERFLOW, sz); MutexEx.Leave(pcache1.mutex); } SysEx.sqlite3MemdebugSetType(p, SysEx.MEMTYPE.PCACHE); } return(p); }