pWal 41571 ext/sqlite3/libsqlite/sqlite3.c SQLITE_PRIVATE int sqlite3WalClose(Wal *pWal, int sync_flags, int, u8 *); pWal 41583 ext/sqlite3/libsqlite/sqlite3.c SQLITE_PRIVATE int sqlite3WalBeginReadTransaction(Wal *pWal, int *); pWal 41584 ext/sqlite3/libsqlite/sqlite3.c SQLITE_PRIVATE void sqlite3WalEndReadTransaction(Wal *pWal); pWal 41591 ext/sqlite3/libsqlite/sqlite3.c SQLITE_PRIVATE Pgno sqlite3WalDbsize(Wal *pWal); pWal 41594 ext/sqlite3/libsqlite/sqlite3.c SQLITE_PRIVATE int sqlite3WalBeginWriteTransaction(Wal *pWal); pWal 41595 ext/sqlite3/libsqlite/sqlite3.c SQLITE_PRIVATE int sqlite3WalEndWriteTransaction(Wal *pWal); pWal 41598 ext/sqlite3/libsqlite/sqlite3.c SQLITE_PRIVATE int sqlite3WalUndo(Wal *pWal, int (*xUndo)(void *, Pgno), void *pUndoCtx); pWal 41602 ext/sqlite3/libsqlite/sqlite3.c SQLITE_PRIVATE void sqlite3WalSavepoint(Wal *pWal, u32 *aWalData); pWal 41606 ext/sqlite3/libsqlite/sqlite3.c SQLITE_PRIVATE int sqlite3WalSavepointUndo(Wal *pWal, u32 *aWalData); pWal 41609 ext/sqlite3/libsqlite/sqlite3.c SQLITE_PRIVATE int sqlite3WalFrames(Wal *pWal, int, PgHdr *, Pgno, int, int); pWal 41613 ext/sqlite3/libsqlite/sqlite3.c Wal *pWal, /* Write-ahead log connection */ pWal 41629 ext/sqlite3/libsqlite/sqlite3.c SQLITE_PRIVATE int sqlite3WalCallback(Wal *pWal); pWal 41634 ext/sqlite3/libsqlite/sqlite3.c SQLITE_PRIVATE int sqlite3WalExclusiveMode(Wal *pWal, int op); pWal 41640 ext/sqlite3/libsqlite/sqlite3.c SQLITE_PRIVATE int sqlite3WalHeapMemory(Wal *pWal); pWal 41646 ext/sqlite3/libsqlite/sqlite3.c SQLITE_PRIVATE int sqlite3WalFramesize(Wal *pWal); pWal 42333 ext/sqlite3/libsqlite/sqlite3.c Wal *pWal; /* Write-ahead log used by "journal_mode=wal" */ pWal 42449 ext/sqlite3/libsqlite/sqlite3.c return (pPager->pWal!=0); pWal 43398 ext/sqlite3/libsqlite/sqlite3.c sqlite3WalEndReadTransaction(pPager->pWal); pWal 43640 ext/sqlite3/libsqlite/sqlite3.c rc2 = sqlite3WalEndWriteTransaction(pPager->pWal); pWal 43659 ext/sqlite3/libsqlite/sqlite3.c && (!pagerUseWal(pPager) || sqlite3WalExclusiveMode(pPager->pWal, 0)) pWal 44521 ext/sqlite3/libsqlite/sqlite3.c rc = sqlite3WalReadFrame(pPager->pWal, iFrame, pgsz, pPg->pData); pWal 44610 ext/sqlite3/libsqlite/sqlite3.c rc = sqlite3WalFindFrame(pPager->pWal, pPg->pgno, &iFrame); pWal 44649 ext/sqlite3/libsqlite/sqlite3.c rc = sqlite3WalUndo(pPager->pWal, pagerUndoCallback, (void *)pPager); pWal 44679 ext/sqlite3/libsqlite/sqlite3.c assert( pPager->pWal ); pWal 44709 ext/sqlite3/libsqlite/sqlite3.c rc = sqlite3WalFrames(pPager->pWal, pWal 44748 ext/sqlite3/libsqlite/sqlite3.c sqlite3WalEndReadTransaction(pPager->pWal); pWal 44750 ext/sqlite3/libsqlite/sqlite3.c rc = sqlite3WalBeginReadTransaction(pPager->pWal, &changed); pWal 44780 ext/sqlite3/libsqlite/sqlite3.c nPage = sqlite3WalDbsize(pPager->pWal); pWal 44991 ext/sqlite3/libsqlite/sqlite3.c rc = sqlite3WalSavepointUndo(pPager->pWal, pSavepoint->aWalData); pWal 45609 ext/sqlite3/libsqlite/sqlite3.c sqlite3WalClose(pPager->pWal, pPager->ckptSyncFlags, pPager->pageSize, pTmp); pWal 45610 ext/sqlite3/libsqlite/sqlite3.c pPager->pWal = 0; pWal 46811 ext/sqlite3/libsqlite/sqlite3.c assert( pPager->pWal==0 || rc==SQLITE_OK ); pWal 46936 ext/sqlite3/libsqlite/sqlite3.c rc = sqlite3WalFindFrame(pPager->pWal, pgno, &iFrame); pWal 47035 ext/sqlite3/libsqlite/sqlite3.c rc = sqlite3WalFindFrame(pPager->pWal, pgno, &iFrame); pWal 47230 ext/sqlite3/libsqlite/sqlite3.c if( pPager->exclusiveMode && sqlite3WalExclusiveMode(pPager->pWal, -1) ){ pWal 47235 ext/sqlite3/libsqlite/sqlite3.c sqlite3WalExclusiveMode(pPager->pWal, 1); pWal 47243 ext/sqlite3/libsqlite/sqlite3.c rc = sqlite3WalBeginWriteTransaction(pPager->pWal); pWal 48155 ext/sqlite3/libsqlite/sqlite3.c sqlite3WalSavepoint(pPager->pWal, aNew[ii].aWalData); pWal 48530 ext/sqlite3/libsqlite/sqlite3.c assert( pPager->exclusiveMode || 0==sqlite3WalHeapMemory(pPager->pWal) ); pWal 48531 ext/sqlite3/libsqlite/sqlite3.c if( eMode>=0 && !pPager->tempFile && !sqlite3WalHeapMemory(pPager->pWal) ){ pWal 48680 ext/sqlite3/libsqlite/sqlite3.c sqlite3WalLimit(pPager->pWal, iLimit); pWal 48714 ext/sqlite3/libsqlite/sqlite3.c if( pPager->pWal ){ pWal 48715 ext/sqlite3/libsqlite/sqlite3.c rc = sqlite3WalCheckpoint(pPager->pWal, eMode, pWal 48726 ext/sqlite3/libsqlite/sqlite3.c return sqlite3WalCallback(pPager->pWal); pWal 48765 ext/sqlite3/libsqlite/sqlite3.c assert( pPager->pWal==0 && pPager->tempFile==0 ); pWal 48783 ext/sqlite3/libsqlite/sqlite3.c pPager->journalSizeLimit, &pPager->pWal pWal 48817 ext/sqlite3/libsqlite/sqlite3.c assert( pbOpen!=0 || (!pPager->tempFile && !pPager->pWal) ); pWal 48819 ext/sqlite3/libsqlite/sqlite3.c if( !pPager->tempFile && !pPager->pWal ){ pWal 48855 ext/sqlite3/libsqlite/sqlite3.c if( !pPager->pWal ){ pWal 48871 ext/sqlite3/libsqlite/sqlite3.c if( rc==SQLITE_OK && pPager->pWal ){ pWal 48874 ext/sqlite3/libsqlite/sqlite3.c rc = sqlite3WalClose(pPager->pWal, pPager->ckptSyncFlags, pWal 48876 ext/sqlite3/libsqlite/sqlite3.c pPager->pWal = 0; pWal 48895 ext/sqlite3/libsqlite/sqlite3.c return sqlite3WalFramesize(pPager->pWal); pWal 49420 ext/sqlite3/libsqlite/sqlite3.c static int walIndexPage(Wal *pWal, int iPage, volatile u32 **ppPage){ pWal 49424 ext/sqlite3/libsqlite/sqlite3.c if( pWal->nWiData<=iPage ){ pWal 49427 ext/sqlite3/libsqlite/sqlite3.c apNew = (volatile u32 **)sqlite3_realloc64((void *)pWal->apWiData, nByte); pWal 49432 ext/sqlite3/libsqlite/sqlite3.c memset((void*)&apNew[pWal->nWiData], 0, pWal 49433 ext/sqlite3/libsqlite/sqlite3.c sizeof(u32*)*(iPage+1-pWal->nWiData)); pWal 49434 ext/sqlite3/libsqlite/sqlite3.c pWal->apWiData = apNew; pWal 49435 ext/sqlite3/libsqlite/sqlite3.c pWal->nWiData = iPage+1; pWal 49439 ext/sqlite3/libsqlite/sqlite3.c if( pWal->apWiData[iPage]==0 ){ pWal 49440 ext/sqlite3/libsqlite/sqlite3.c if( pWal->exclusiveMode==WAL_HEAPMEMORY_MODE ){ pWal 49441 ext/sqlite3/libsqlite/sqlite3.c pWal->apWiData[iPage] = (u32 volatile *)sqlite3MallocZero(WALINDEX_PGSZ); pWal 49442 ext/sqlite3/libsqlite/sqlite3.c if( !pWal->apWiData[iPage] ) rc = SQLITE_NOMEM; pWal 49444 ext/sqlite3/libsqlite/sqlite3.c rc = sqlite3OsShmMap(pWal->pDbFd, iPage, WALINDEX_PGSZ, pWal 49445 ext/sqlite3/libsqlite/sqlite3.c pWal->writeLock, (void volatile **)&pWal->apWiData[iPage] pWal 49448 ext/sqlite3/libsqlite/sqlite3.c pWal->readOnly |= WAL_SHM_RDONLY; pWal 49454 ext/sqlite3/libsqlite/sqlite3.c *ppPage = pWal->apWiData[iPage]; pWal 49462 ext/sqlite3/libsqlite/sqlite3.c static volatile WalCkptInfo *walCkptInfo(Wal *pWal){ pWal 49463 ext/sqlite3/libsqlite/sqlite3.c assert( pWal->nWiData>0 && pWal->apWiData[0] ); pWal 49464 ext/sqlite3/libsqlite/sqlite3.c return (volatile WalCkptInfo*)&(pWal->apWiData[0][sizeof(WalIndexHdr)/2]); pWal 49470 ext/sqlite3/libsqlite/sqlite3.c static volatile WalIndexHdr *walIndexHdr(Wal *pWal){ pWal 49471 ext/sqlite3/libsqlite/sqlite3.c assert( pWal->nWiData>0 && pWal->apWiData[0] ); pWal 49472 ext/sqlite3/libsqlite/sqlite3.c return (volatile WalIndexHdr*)pWal->apWiData[0]; pWal 49534 ext/sqlite3/libsqlite/sqlite3.c static void walShmBarrier(Wal *pWal){ pWal 49535 ext/sqlite3/libsqlite/sqlite3.c if( pWal->exclusiveMode!=WAL_HEAPMEMORY_MODE ){ pWal 49536 ext/sqlite3/libsqlite/sqlite3.c sqlite3OsShmBarrier(pWal->pDbFd); pWal 49545 ext/sqlite3/libsqlite/sqlite3.c static void walIndexWriteHdr(Wal *pWal){ pWal 49546 ext/sqlite3/libsqlite/sqlite3.c volatile WalIndexHdr *aHdr = walIndexHdr(pWal); pWal 49549 ext/sqlite3/libsqlite/sqlite3.c assert( pWal->writeLock ); pWal 49550 ext/sqlite3/libsqlite/sqlite3.c pWal->hdr.isInit = 1; pWal 49551 ext/sqlite3/libsqlite/sqlite3.c pWal->hdr.iVersion = WALINDEX_MAX_VERSION; pWal 49552 ext/sqlite3/libsqlite/sqlite3.c walChecksumBytes(1, (u8*)&pWal->hdr, nCksum, 0, pWal->hdr.aCksum); pWal 49553 ext/sqlite3/libsqlite/sqlite3.c memcpy((void *)&aHdr[1], (void *)&pWal->hdr, sizeof(WalIndexHdr)); pWal 49554 ext/sqlite3/libsqlite/sqlite3.c walShmBarrier(pWal); pWal 49555 ext/sqlite3/libsqlite/sqlite3.c memcpy((void *)&aHdr[0], (void *)&pWal->hdr, sizeof(WalIndexHdr)); pWal 49572 ext/sqlite3/libsqlite/sqlite3.c Wal *pWal, /* The write-ahead log */ pWal 49579 ext/sqlite3/libsqlite/sqlite3.c u32 *aCksum = pWal->hdr.aFrameCksum; pWal 49583 ext/sqlite3/libsqlite/sqlite3.c memcpy(&aFrame[8], pWal->hdr.aSalt, 8); pWal 49585 ext/sqlite3/libsqlite/sqlite3.c nativeCksum = (pWal->hdr.bigEndCksum==SQLITE_BIGENDIAN); pWal 49587 ext/sqlite3/libsqlite/sqlite3.c walChecksumBytes(nativeCksum, aData, pWal->szPage, aCksum, aCksum); pWal 49599 ext/sqlite3/libsqlite/sqlite3.c Wal *pWal, /* The write-ahead log */ pWal 49606 ext/sqlite3/libsqlite/sqlite3.c u32 *aCksum = pWal->hdr.aFrameCksum; pWal 49613 ext/sqlite3/libsqlite/sqlite3.c if( memcmp(&pWal->hdr.aSalt, &aFrame[8], 8)!=0 ){ pWal 49629 ext/sqlite3/libsqlite/sqlite3.c nativeCksum = (pWal->hdr.bigEndCksum==SQLITE_BIGENDIAN); pWal 49631 ext/sqlite3/libsqlite/sqlite3.c walChecksumBytes(nativeCksum, aData, pWal->szPage, aCksum, aCksum); pWal 49677 ext/sqlite3/libsqlite/sqlite3.c static int walLockShared(Wal *pWal, int lockIdx){ pWal 49679 ext/sqlite3/libsqlite/sqlite3.c if( pWal->exclusiveMode ) return SQLITE_OK; pWal 49680 ext/sqlite3/libsqlite/sqlite3.c rc = sqlite3OsShmLock(pWal->pDbFd, lockIdx, 1, pWal 49682 ext/sqlite3/libsqlite/sqlite3.c WALTRACE(("WAL%p: acquire SHARED-%s %s\n", pWal, pWal 49684 ext/sqlite3/libsqlite/sqlite3.c VVA_ONLY( pWal->lockError = (u8)(rc!=SQLITE_OK && rc!=SQLITE_BUSY); ) pWal 49687 ext/sqlite3/libsqlite/sqlite3.c static void walUnlockShared(Wal *pWal, int lockIdx){ pWal 49688 ext/sqlite3/libsqlite/sqlite3.c if( pWal->exclusiveMode ) return; pWal 49689 ext/sqlite3/libsqlite/sqlite3.c (void)sqlite3OsShmLock(pWal->pDbFd, lockIdx, 1, pWal 49691 ext/sqlite3/libsqlite/sqlite3.c WALTRACE(("WAL%p: release SHARED-%s\n", pWal, walLockName(lockIdx))); pWal 49693 ext/sqlite3/libsqlite/sqlite3.c static int walLockExclusive(Wal *pWal, int lockIdx, int n, int fBlock){ pWal 49695 ext/sqlite3/libsqlite/sqlite3.c if( pWal->exclusiveMode ) return SQLITE_OK; pWal 49696 ext/sqlite3/libsqlite/sqlite3.c if( fBlock ) sqlite3OsFileControl(pWal->pDbFd, SQLITE_FCNTL_WAL_BLOCK, 0); pWal 49697 ext/sqlite3/libsqlite/sqlite3.c rc = sqlite3OsShmLock(pWal->pDbFd, lockIdx, n, pWal 49699 ext/sqlite3/libsqlite/sqlite3.c WALTRACE(("WAL%p: acquire EXCLUSIVE-%s cnt=%d %s\n", pWal, pWal 49701 ext/sqlite3/libsqlite/sqlite3.c VVA_ONLY( pWal->lockError = (u8)(rc!=SQLITE_OK && rc!=SQLITE_BUSY); ) pWal 49704 ext/sqlite3/libsqlite/sqlite3.c static void walUnlockExclusive(Wal *pWal, int lockIdx, int n){ pWal 49705 ext/sqlite3/libsqlite/sqlite3.c if( pWal->exclusiveMode ) return; pWal 49706 ext/sqlite3/libsqlite/sqlite3.c (void)sqlite3OsShmLock(pWal->pDbFd, lockIdx, n, pWal 49708 ext/sqlite3/libsqlite/sqlite3.c WALTRACE(("WAL%p: release EXCLUSIVE-%s cnt=%d\n", pWal, pWal 49741 ext/sqlite3/libsqlite/sqlite3.c Wal *pWal, /* WAL handle */ pWal 49750 ext/sqlite3/libsqlite/sqlite3.c rc = walIndexPage(pWal, iHash, &aPgno); pWal 49792 ext/sqlite3/libsqlite/sqlite3.c static u32 walFramePgno(Wal *pWal, u32 iFrame){ pWal 49795 ext/sqlite3/libsqlite/sqlite3.c return pWal->apWiData[0][WALINDEX_HDR_SIZE/sizeof(u32) + iFrame - 1]; pWal 49797 ext/sqlite3/libsqlite/sqlite3.c return pWal->apWiData[iHash][(iFrame-1-HASHTABLE_NPAGE_ONE)%HASHTABLE_NPAGE]; pWal 49812 ext/sqlite3/libsqlite/sqlite3.c static void walCleanupHash(Wal *pWal){ pWal 49820 ext/sqlite3/libsqlite/sqlite3.c assert( pWal->writeLock ); pWal 49821 ext/sqlite3/libsqlite/sqlite3.c testcase( pWal->hdr.mxFrame==HASHTABLE_NPAGE_ONE-1 ); pWal 49822 ext/sqlite3/libsqlite/sqlite3.c testcase( pWal->hdr.mxFrame==HASHTABLE_NPAGE_ONE ); pWal 49823 ext/sqlite3/libsqlite/sqlite3.c testcase( pWal->hdr.mxFrame==HASHTABLE_NPAGE_ONE+1 ); pWal 49825 ext/sqlite3/libsqlite/sqlite3.c if( pWal->hdr.mxFrame==0 ) return; pWal 49831 ext/sqlite3/libsqlite/sqlite3.c assert( pWal->nWiData>walFramePage(pWal->hdr.mxFrame) ); pWal 49832 ext/sqlite3/libsqlite/sqlite3.c assert( pWal->apWiData[walFramePage(pWal->hdr.mxFrame)] ); pWal 49833 ext/sqlite3/libsqlite/sqlite3.c walHashGet(pWal, walFramePage(pWal->hdr.mxFrame), &aHash, &aPgno, &iZero); pWal 49838 ext/sqlite3/libsqlite/sqlite3.c iLimit = pWal->hdr.mxFrame - iZero; pWal 49874 ext/sqlite3/libsqlite/sqlite3.c static int walIndexAppend(Wal *pWal, u32 iFrame, u32 iPage){ pWal 49880 ext/sqlite3/libsqlite/sqlite3.c rc = walHashGet(pWal, walFramePage(iFrame), &aHash, &aPgno, &iZero); pWal 49908 ext/sqlite3/libsqlite/sqlite3.c walCleanupHash(pWal); pWal 49963 ext/sqlite3/libsqlite/sqlite3.c static int walIndexRecover(Wal *pWal){ pWal 49976 ext/sqlite3/libsqlite/sqlite3.c assert( pWal->ckptLock==1 || pWal->ckptLock==0 ); pWal 49979 ext/sqlite3/libsqlite/sqlite3.c assert( pWal->writeLock ); pWal 49980 ext/sqlite3/libsqlite/sqlite3.c iLock = WAL_ALL_BUT_WRITE + pWal->ckptLock; pWal 49982 ext/sqlite3/libsqlite/sqlite3.c rc = walLockExclusive(pWal, iLock, nLock, 0); pWal 49986 ext/sqlite3/libsqlite/sqlite3.c WALTRACE(("WAL%p: recovery begin...\n", pWal)); pWal 49988 ext/sqlite3/libsqlite/sqlite3.c memset(&pWal->hdr, 0, sizeof(WalIndexHdr)); pWal 49990 ext/sqlite3/libsqlite/sqlite3.c rc = sqlite3OsFileSize(pWal->pWalFd, &nSize); pWal 50008 ext/sqlite3/libsqlite/sqlite3.c rc = sqlite3OsRead(pWal->pWalFd, aBuf, WAL_HDRSIZE, 0); pWal 50027 ext/sqlite3/libsqlite/sqlite3.c pWal->hdr.bigEndCksum = (u8)(magic&0x00000001); pWal 50028 ext/sqlite3/libsqlite/sqlite3.c pWal->szPage = szPage; pWal 50029 ext/sqlite3/libsqlite/sqlite3.c pWal->nCkpt = sqlite3Get4byte(&aBuf[12]); pWal 50030 ext/sqlite3/libsqlite/sqlite3.c memcpy(&pWal->hdr.aSalt, &aBuf[16], 8); pWal 50033 ext/sqlite3/libsqlite/sqlite3.c walChecksumBytes(pWal->hdr.bigEndCksum==SQLITE_BIGENDIAN, pWal 50034 ext/sqlite3/libsqlite/sqlite3.c aBuf, WAL_HDRSIZE-2*4, 0, pWal->hdr.aFrameCksum pWal 50036 ext/sqlite3/libsqlite/sqlite3.c if( pWal->hdr.aFrameCksum[0]!=sqlite3Get4byte(&aBuf[24]) pWal 50037 ext/sqlite3/libsqlite/sqlite3.c || pWal->hdr.aFrameCksum[1]!=sqlite3Get4byte(&aBuf[28]) pWal 50067 ext/sqlite3/libsqlite/sqlite3.c rc = sqlite3OsRead(pWal->pWalFd, aFrame, szFrame, iOffset); pWal 50069 ext/sqlite3/libsqlite/sqlite3.c isValid = walDecodeFrame(pWal, &pgno, &nTruncate, aData, aFrame); pWal 50071 ext/sqlite3/libsqlite/sqlite3.c rc = walIndexAppend(pWal, iFrame, pgno); pWal 50076 ext/sqlite3/libsqlite/sqlite3.c pWal->hdr.mxFrame = iFrame; pWal 50077 ext/sqlite3/libsqlite/sqlite3.c pWal->hdr.nPage = nTruncate; pWal 50078 ext/sqlite3/libsqlite/sqlite3.c pWal->hdr.szPage = (u16)((szPage&0xff00) | (szPage>>16)); pWal 50081 ext/sqlite3/libsqlite/sqlite3.c aFrameCksum[0] = pWal->hdr.aFrameCksum[0]; pWal 50082 ext/sqlite3/libsqlite/sqlite3.c aFrameCksum[1] = pWal->hdr.aFrameCksum[1]; pWal 50093 ext/sqlite3/libsqlite/sqlite3.c pWal->hdr.aFrameCksum[0] = aFrameCksum[0]; pWal 50094 ext/sqlite3/libsqlite/sqlite3.c pWal->hdr.aFrameCksum[1] = aFrameCksum[1]; pWal 50095 ext/sqlite3/libsqlite/sqlite3.c walIndexWriteHdr(pWal); pWal 50101 ext/sqlite3/libsqlite/sqlite3.c pInfo = walCkptInfo(pWal); pWal 50105 ext/sqlite3/libsqlite/sqlite3.c if( pWal->hdr.mxFrame ) pInfo->aReadMark[1] = pWal->hdr.mxFrame; pWal 50112 ext/sqlite3/libsqlite/sqlite3.c if( pWal->hdr.nPage ){ pWal 50115 ext/sqlite3/libsqlite/sqlite3.c pWal->hdr.mxFrame, pWal->zWalName pWal 50121 ext/sqlite3/libsqlite/sqlite3.c WALTRACE(("WAL%p: recovery %s\n", pWal, rc ? "failed" : "ok")); pWal 50122 ext/sqlite3/libsqlite/sqlite3.c walUnlockExclusive(pWal, iLock, nLock); pWal 50129 ext/sqlite3/libsqlite/sqlite3.c static void walIndexClose(Wal *pWal, int isDelete){ pWal 50130 ext/sqlite3/libsqlite/sqlite3.c if( pWal->exclusiveMode==WAL_HEAPMEMORY_MODE ){ pWal 50132 ext/sqlite3/libsqlite/sqlite3.c for(i=0; i<pWal->nWiData; i++){ pWal 50133 ext/sqlite3/libsqlite/sqlite3.c sqlite3_free((void *)pWal->apWiData[i]); pWal 50134 ext/sqlite3/libsqlite/sqlite3.c pWal->apWiData[i] = 0; pWal 50137 ext/sqlite3/libsqlite/sqlite3.c sqlite3OsShmUnmap(pWal->pDbFd, isDelete); pWal 50226 ext/sqlite3/libsqlite/sqlite3.c SQLITE_PRIVATE void sqlite3WalLimit(Wal *pWal, i64 iLimit){ pWal 50227 ext/sqlite3/libsqlite/sqlite3.c if( pWal ) pWal->mxWalSize = iLimit; pWal 50425 ext/sqlite3/libsqlite/sqlite3.c static int walIteratorInit(Wal *pWal, WalIterator **pp){ pWal 50437 ext/sqlite3/libsqlite/sqlite3.c assert( pWal->ckptLock && pWal->hdr.mxFrame>0 ); pWal 50438 ext/sqlite3/libsqlite/sqlite3.c iLast = pWal->hdr.mxFrame; pWal 50467 ext/sqlite3/libsqlite/sqlite3.c rc = walHashGet(pWal, i, &aHash, &aPgno, &iZero); pWal 50508 ext/sqlite3/libsqlite/sqlite3.c Wal *pWal, /* WAL connection */ pWal 50516 ext/sqlite3/libsqlite/sqlite3.c rc = walLockExclusive(pWal, lockIdx, n, 0); pWal 50525 ext/sqlite3/libsqlite/sqlite3.c static int walPagesize(Wal *pWal){ pWal 50526 ext/sqlite3/libsqlite/sqlite3.c return (pWal->hdr.szPage&0xfe00) + ((pWal->hdr.szPage&0x0001)<<16); pWal 50546 ext/sqlite3/libsqlite/sqlite3.c static void walRestartHdr(Wal *pWal, u32 salt1){ pWal 50547 ext/sqlite3/libsqlite/sqlite3.c volatile WalCkptInfo *pInfo = walCkptInfo(pWal); pWal 50549 ext/sqlite3/libsqlite/sqlite3.c u32 *aSalt = pWal->hdr.aSalt; /* Big-endian salt values */ pWal 50550 ext/sqlite3/libsqlite/sqlite3.c pWal->nCkpt++; pWal 50551 ext/sqlite3/libsqlite/sqlite3.c pWal->hdr.mxFrame = 0; pWal 50553 ext/sqlite3/libsqlite/sqlite3.c memcpy(&pWal->hdr.aSalt[1], &salt1, 4); pWal 50554 ext/sqlite3/libsqlite/sqlite3.c walIndexWriteHdr(pWal); pWal 50593 ext/sqlite3/libsqlite/sqlite3.c Wal *pWal, /* Wal connection */ pWal 50610 ext/sqlite3/libsqlite/sqlite3.c szPage = walPagesize(pWal); pWal 50613 ext/sqlite3/libsqlite/sqlite3.c pInfo = walCkptInfo(pWal); pWal 50614 ext/sqlite3/libsqlite/sqlite3.c if( pInfo->nBackfill<pWal->hdr.mxFrame ){ pWal 50617 ext/sqlite3/libsqlite/sqlite3.c rc = walIteratorInit(pWal, &pIter); pWal 50632 ext/sqlite3/libsqlite/sqlite3.c mxSafeFrame = pWal->hdr.mxFrame; pWal 50633 ext/sqlite3/libsqlite/sqlite3.c mxPage = pWal->hdr.nPage; pWal 50645 ext/sqlite3/libsqlite/sqlite3.c assert( y<=pWal->hdr.mxFrame ); pWal 50646 ext/sqlite3/libsqlite/sqlite3.c rc = walBusyLock(pWal, xBusy, pBusyArg, WAL_READ_LOCK(i), 1); pWal 50649 ext/sqlite3/libsqlite/sqlite3.c walUnlockExclusive(pWal, WAL_READ_LOCK(i), 1); pWal 50660 ext/sqlite3/libsqlite/sqlite3.c && (rc = walBusyLock(pWal, xBusy, pBusyArg, WAL_READ_LOCK(0),1))==SQLITE_OK pWal 50667 ext/sqlite3/libsqlite/sqlite3.c rc = sqlite3OsSync(pWal->pWalFd, sync_flags); pWal 50675 ext/sqlite3/libsqlite/sqlite3.c rc = sqlite3OsFileSize(pWal->pDbFd, &nSize); pWal 50677 ext/sqlite3/libsqlite/sqlite3.c sqlite3OsFileControlHint(pWal->pDbFd, SQLITE_FCNTL_SIZE_HINT, &nReq); pWal 50685 ext/sqlite3/libsqlite/sqlite3.c assert( walFramePgno(pWal, iFrame)==iDbpage ); pWal 50691 ext/sqlite3/libsqlite/sqlite3.c rc = sqlite3OsRead(pWal->pWalFd, zBuf, szPage, iOffset); pWal 50695 ext/sqlite3/libsqlite/sqlite3.c rc = sqlite3OsWrite(pWal->pDbFd, zBuf, szPage, iOffset); pWal 50701 ext/sqlite3/libsqlite/sqlite3.c if( mxSafeFrame==walIndexHdr(pWal)->mxFrame ){ pWal 50702 ext/sqlite3/libsqlite/sqlite3.c i64 szDb = pWal->hdr.nPage*(i64)szPage; pWal 50704 ext/sqlite3/libsqlite/sqlite3.c rc = sqlite3OsTruncate(pWal->pDbFd, szDb); pWal 50706 ext/sqlite3/libsqlite/sqlite3.c rc = sqlite3OsSync(pWal->pDbFd, sync_flags); pWal 50715 ext/sqlite3/libsqlite/sqlite3.c walUnlockExclusive(pWal, WAL_READ_LOCK(0), 1); pWal 50731 ext/sqlite3/libsqlite/sqlite3.c assert( pWal->writeLock ); pWal 50732 ext/sqlite3/libsqlite/sqlite3.c if( pInfo->nBackfill<pWal->hdr.mxFrame ){ pWal 50737 ext/sqlite3/libsqlite/sqlite3.c assert( pInfo->nBackfill==pWal->hdr.mxFrame ); pWal 50738 ext/sqlite3/libsqlite/sqlite3.c rc = walBusyLock(pWal, xBusy, pBusyArg, WAL_READ_LOCK(1), WAL_NREADER-1); pWal 50754 ext/sqlite3/libsqlite/sqlite3.c walRestartHdr(pWal, salt1); pWal 50755 ext/sqlite3/libsqlite/sqlite3.c rc = sqlite3OsTruncate(pWal->pWalFd, 0); pWal 50757 ext/sqlite3/libsqlite/sqlite3.c walUnlockExclusive(pWal, WAL_READ_LOCK(1), WAL_NREADER-1); pWal 50771 ext/sqlite3/libsqlite/sqlite3.c static void walLimitSize(Wal *pWal, i64 nMax){ pWal 50775 ext/sqlite3/libsqlite/sqlite3.c rx = sqlite3OsFileSize(pWal->pWalFd, &sz); pWal 50777 ext/sqlite3/libsqlite/sqlite3.c rx = sqlite3OsTruncate(pWal->pWalFd, nMax); pWal 50781 ext/sqlite3/libsqlite/sqlite3.c sqlite3_log(rx, "cannot limit WAL size: %s", pWal->zWalName); pWal 50789 ext/sqlite3/libsqlite/sqlite3.c Wal *pWal, /* Wal to close */ pWal 50795 ext/sqlite3/libsqlite/sqlite3.c if( pWal ){ pWal 50806 ext/sqlite3/libsqlite/sqlite3.c rc = sqlite3OsLock(pWal->pDbFd, SQLITE_LOCK_EXCLUSIVE); pWal 50808 ext/sqlite3/libsqlite/sqlite3.c if( pWal->exclusiveMode==WAL_NORMAL_MODE ){ pWal 50809 ext/sqlite3/libsqlite/sqlite3.c pWal->exclusiveMode = WAL_EXCLUSIVE_MODE; pWal 50812 ext/sqlite3/libsqlite/sqlite3.c pWal, SQLITE_CHECKPOINT_PASSIVE, 0, 0, sync_flags, nBuf, zBuf, 0, 0 pWal 50817 ext/sqlite3/libsqlite/sqlite3.c pWal->pDbFd, SQLITE_FCNTL_PERSIST_WAL, &bPersist pWal 50824 ext/sqlite3/libsqlite/sqlite3.c }else if( pWal->mxWalSize>=0 ){ pWal 50831 ext/sqlite3/libsqlite/sqlite3.c walLimitSize(pWal, 0); pWal 50836 ext/sqlite3/libsqlite/sqlite3.c walIndexClose(pWal, isDelete); pWal 50837 ext/sqlite3/libsqlite/sqlite3.c sqlite3OsClose(pWal->pWalFd); pWal 50840 ext/sqlite3/libsqlite/sqlite3.c sqlite3OsDelete(pWal->pVfs, pWal->zWalName, 0); pWal 50843 ext/sqlite3/libsqlite/sqlite3.c WALTRACE(("WAL%p: closed\n", pWal)); pWal 50844 ext/sqlite3/libsqlite/sqlite3.c sqlite3_free((void *)pWal->apWiData); pWal 50845 ext/sqlite3/libsqlite/sqlite3.c sqlite3_free(pWal); pWal 50867 ext/sqlite3/libsqlite/sqlite3.c static int walIndexTryHdr(Wal *pWal, int *pChanged){ pWal 50873 ext/sqlite3/libsqlite/sqlite3.c assert( pWal->nWiData>0 && pWal->apWiData[0] ); pWal 50885 ext/sqlite3/libsqlite/sqlite3.c aHdr = walIndexHdr(pWal); pWal 50887 ext/sqlite3/libsqlite/sqlite3.c walShmBarrier(pWal); pWal 50901 ext/sqlite3/libsqlite/sqlite3.c if( memcmp(&pWal->hdr, &h1, sizeof(WalIndexHdr)) ){ pWal 50903 ext/sqlite3/libsqlite/sqlite3.c memcpy(&pWal->hdr, &h1, sizeof(WalIndexHdr)); pWal 50904 ext/sqlite3/libsqlite/sqlite3.c pWal->szPage = (pWal->hdr.szPage&0xfe00) + ((pWal->hdr.szPage&0x0001)<<16); pWal 50905 ext/sqlite3/libsqlite/sqlite3.c testcase( pWal->szPage<=32768 ); pWal 50906 ext/sqlite3/libsqlite/sqlite3.c testcase( pWal->szPage>=65536 ); pWal 50925 ext/sqlite3/libsqlite/sqlite3.c static int walIndexReadHdr(Wal *pWal, int *pChanged){ pWal 50934 ext/sqlite3/libsqlite/sqlite3.c rc = walIndexPage(pWal, 0, &page0); pWal 50938 ext/sqlite3/libsqlite/sqlite3.c assert( page0 || pWal->writeLock==0 ); pWal 50945 ext/sqlite3/libsqlite/sqlite3.c badHdr = (page0 ? walIndexTryHdr(pWal, pChanged) : 1); pWal 50950 ext/sqlite3/libsqlite/sqlite3.c assert( badHdr==0 || pWal->writeLock==0 ); pWal 50952 ext/sqlite3/libsqlite/sqlite3.c if( pWal->readOnly & WAL_SHM_RDONLY ){ pWal 50953 ext/sqlite3/libsqlite/sqlite3.c if( SQLITE_OK==(rc = walLockShared(pWal, WAL_WRITE_LOCK)) ){ pWal 50954 ext/sqlite3/libsqlite/sqlite3.c walUnlockShared(pWal, WAL_WRITE_LOCK); pWal 50957 ext/sqlite3/libsqlite/sqlite3.c }else if( SQLITE_OK==(rc = walLockExclusive(pWal, WAL_WRITE_LOCK, 1, 1)) ){ pWal 50958 ext/sqlite3/libsqlite/sqlite3.c pWal->writeLock = 1; pWal 50959 ext/sqlite3/libsqlite/sqlite3.c if( SQLITE_OK==(rc = walIndexPage(pWal, 0, &page0)) ){ pWal 50960 ext/sqlite3/libsqlite/sqlite3.c badHdr = walIndexTryHdr(pWal, pChanged); pWal 50966 ext/sqlite3/libsqlite/sqlite3.c rc = walIndexRecover(pWal); pWal 50970 ext/sqlite3/libsqlite/sqlite3.c pWal->writeLock = 0; pWal 50971 ext/sqlite3/libsqlite/sqlite3.c walUnlockExclusive(pWal, WAL_WRITE_LOCK, 1); pWal 50979 ext/sqlite3/libsqlite/sqlite3.c if( badHdr==0 && pWal->hdr.iVersion!=WALINDEX_MAX_VERSION ){ pWal 51042 ext/sqlite3/libsqlite/sqlite3.c static int walTryBeginRead(Wal *pWal, int *pChanged, int useWal, int cnt){ pWal 51049 ext/sqlite3/libsqlite/sqlite3.c assert( pWal->readLock<0 ); /* Not currently locked */ pWal 51071 ext/sqlite3/libsqlite/sqlite3.c VVA_ONLY( pWal->lockError = 1; ) pWal 51075 ext/sqlite3/libsqlite/sqlite3.c sqlite3OsSleep(pWal->pVfs, nDelay); pWal 51079 ext/sqlite3/libsqlite/sqlite3.c rc = walIndexReadHdr(pWal, pChanged); pWal 51089 ext/sqlite3/libsqlite/sqlite3.c if( pWal->apWiData[0]==0 ){ pWal 51098 ext/sqlite3/libsqlite/sqlite3.c }else if( SQLITE_OK==(rc = walLockShared(pWal, WAL_RECOVER_LOCK)) ){ pWal 51099 ext/sqlite3/libsqlite/sqlite3.c walUnlockShared(pWal, WAL_RECOVER_LOCK); pWal 51110 ext/sqlite3/libsqlite/sqlite3.c pInfo = walCkptInfo(pWal); pWal 51111 ext/sqlite3/libsqlite/sqlite3.c if( !useWal && pInfo->nBackfill==pWal->hdr.mxFrame ){ pWal 51115 ext/sqlite3/libsqlite/sqlite3.c rc = walLockShared(pWal, WAL_READ_LOCK(0)); pWal 51116 ext/sqlite3/libsqlite/sqlite3.c walShmBarrier(pWal); pWal 51118 ext/sqlite3/libsqlite/sqlite3.c if( memcmp((void *)walIndexHdr(pWal), &pWal->hdr, sizeof(WalIndexHdr)) ){ pWal 51132 ext/sqlite3/libsqlite/sqlite3.c walUnlockShared(pWal, WAL_READ_LOCK(0)); pWal 51135 ext/sqlite3/libsqlite/sqlite3.c pWal->readLock = 0; pWal 51151 ext/sqlite3/libsqlite/sqlite3.c if( mxReadMark<=thisMark && thisMark<=pWal->hdr.mxFrame ){ pWal 51159 ext/sqlite3/libsqlite/sqlite3.c if( (pWal->readOnly & WAL_SHM_RDONLY)==0 pWal 51160 ext/sqlite3/libsqlite/sqlite3.c && (mxReadMark<pWal->hdr.mxFrame || mxI==0) pWal 51163 ext/sqlite3/libsqlite/sqlite3.c rc = walLockExclusive(pWal, WAL_READ_LOCK(i), 1, 0); pWal 51165 ext/sqlite3/libsqlite/sqlite3.c mxReadMark = pInfo->aReadMark[i] = pWal->hdr.mxFrame; pWal 51167 ext/sqlite3/libsqlite/sqlite3.c walUnlockExclusive(pWal, WAL_READ_LOCK(i), 1); pWal 51175 ext/sqlite3/libsqlite/sqlite3.c assert( rc==SQLITE_BUSY || (pWal->readOnly & WAL_SHM_RDONLY)!=0 ); pWal 51179 ext/sqlite3/libsqlite/sqlite3.c rc = walLockShared(pWal, WAL_READ_LOCK(mxI)); pWal 51203 ext/sqlite3/libsqlite/sqlite3.c walShmBarrier(pWal); pWal 51205 ext/sqlite3/libsqlite/sqlite3.c || memcmp((void *)walIndexHdr(pWal), &pWal->hdr, sizeof(WalIndexHdr)) pWal 51207 ext/sqlite3/libsqlite/sqlite3.c walUnlockShared(pWal, WAL_READ_LOCK(mxI)); pWal 51210 ext/sqlite3/libsqlite/sqlite3.c assert( mxReadMark<=pWal->hdr.mxFrame ); pWal 51211 ext/sqlite3/libsqlite/sqlite3.c pWal->readLock = (i16)mxI; pWal 51231 ext/sqlite3/libsqlite/sqlite3.c SQLITE_PRIVATE int sqlite3WalBeginReadTransaction(Wal *pWal, int *pChanged){ pWal 51236 ext/sqlite3/libsqlite/sqlite3.c rc = walTryBeginRead(pWal, pChanged, 0, ++cnt); pWal 51249 ext/sqlite3/libsqlite/sqlite3.c SQLITE_PRIVATE void sqlite3WalEndReadTransaction(Wal *pWal){ pWal 51250 ext/sqlite3/libsqlite/sqlite3.c sqlite3WalEndWriteTransaction(pWal); pWal 51251 ext/sqlite3/libsqlite/sqlite3.c if( pWal->readLock>=0 ){ pWal 51252 ext/sqlite3/libsqlite/sqlite3.c walUnlockShared(pWal, WAL_READ_LOCK(pWal->readLock)); pWal 51253 ext/sqlite3/libsqlite/sqlite3.c pWal->readLock = -1; pWal 51266 ext/sqlite3/libsqlite/sqlite3.c Wal *pWal, /* WAL handle */ pWal 51271 ext/sqlite3/libsqlite/sqlite3.c u32 iLast = pWal->hdr.mxFrame; /* Last page in WAL for this reader */ pWal 51275 ext/sqlite3/libsqlite/sqlite3.c assert( pWal->readLock>=0 || pWal->lockError ); pWal 51283 ext/sqlite3/libsqlite/sqlite3.c if( iLast==0 || pWal->readLock==0 ){ pWal 51321 ext/sqlite3/libsqlite/sqlite3.c rc = walHashGet(pWal, iHash, &aHash, &aPgno, &iZero); pWal 51346 ext/sqlite3/libsqlite/sqlite3.c if( walFramePgno(pWal, iTest)==pgno ){ pWal 51365 ext/sqlite3/libsqlite/sqlite3.c Wal *pWal, /* WAL handle */ pWal 51372 ext/sqlite3/libsqlite/sqlite3.c sz = pWal->hdr.szPage; pWal 51378 ext/sqlite3/libsqlite/sqlite3.c return sqlite3OsRead(pWal->pWalFd, pOut, (nOut>sz ? sz : nOut), iOffset); pWal 51384 ext/sqlite3/libsqlite/sqlite3.c SQLITE_PRIVATE Pgno sqlite3WalDbsize(Wal *pWal){ pWal 51385 ext/sqlite3/libsqlite/sqlite3.c if( pWal && ALWAYS(pWal->readLock>=0) ){ pWal 51386 ext/sqlite3/libsqlite/sqlite3.c return pWal->hdr.nPage; pWal 51405 ext/sqlite3/libsqlite/sqlite3.c SQLITE_PRIVATE int sqlite3WalBeginWriteTransaction(Wal *pWal){ pWal 51410 ext/sqlite3/libsqlite/sqlite3.c assert( pWal->readLock>=0 ); pWal 51412 ext/sqlite3/libsqlite/sqlite3.c if( pWal->readOnly ){ pWal 51419 ext/sqlite3/libsqlite/sqlite3.c rc = walLockExclusive(pWal, WAL_WRITE_LOCK, 1, 0); pWal 51423 ext/sqlite3/libsqlite/sqlite3.c pWal->writeLock = 1; pWal 51429 ext/sqlite3/libsqlite/sqlite3.c if( memcmp(&pWal->hdr, (void *)walIndexHdr(pWal), sizeof(WalIndexHdr))!=0 ){ pWal 51430 ext/sqlite3/libsqlite/sqlite3.c walUnlockExclusive(pWal, WAL_WRITE_LOCK, 1); pWal 51431 ext/sqlite3/libsqlite/sqlite3.c pWal->writeLock = 0; pWal 51442 ext/sqlite3/libsqlite/sqlite3.c SQLITE_PRIVATE int sqlite3WalEndWriteTransaction(Wal *pWal){ pWal 51443 ext/sqlite3/libsqlite/sqlite3.c if( pWal->writeLock ){ pWal 51444 ext/sqlite3/libsqlite/sqlite3.c walUnlockExclusive(pWal, WAL_WRITE_LOCK, 1); pWal 51445 ext/sqlite3/libsqlite/sqlite3.c pWal->writeLock = 0; pWal 51446 ext/sqlite3/libsqlite/sqlite3.c pWal->truncateOnCommit = 0; pWal 51463 ext/sqlite3/libsqlite/sqlite3.c SQLITE_PRIVATE int sqlite3WalUndo(Wal *pWal, int (*xUndo)(void *, Pgno), void *pUndoCtx){ pWal 51465 ext/sqlite3/libsqlite/sqlite3.c if( ALWAYS(pWal->writeLock) ){ pWal 51466 ext/sqlite3/libsqlite/sqlite3.c Pgno iMax = pWal->hdr.mxFrame; pWal 51472 ext/sqlite3/libsqlite/sqlite3.c memcpy(&pWal->hdr, (void *)walIndexHdr(pWal), sizeof(WalIndexHdr)); pWal 51474 ext/sqlite3/libsqlite/sqlite3.c for(iFrame=pWal->hdr.mxFrame+1; pWal 51489 ext/sqlite3/libsqlite/sqlite3.c assert( walFramePgno(pWal, iFrame)!=1 ); pWal 51490 ext/sqlite3/libsqlite/sqlite3.c rc = xUndo(pUndoCtx, walFramePgno(pWal, iFrame)); pWal 51492 ext/sqlite3/libsqlite/sqlite3.c if( iMax!=pWal->hdr.mxFrame ) walCleanupHash(pWal); pWal 51503 ext/sqlite3/libsqlite/sqlite3.c SQLITE_PRIVATE void sqlite3WalSavepoint(Wal *pWal, u32 *aWalData){ pWal 51504 ext/sqlite3/libsqlite/sqlite3.c assert( pWal->writeLock ); pWal 51505 ext/sqlite3/libsqlite/sqlite3.c aWalData[0] = pWal->hdr.mxFrame; pWal 51506 ext/sqlite3/libsqlite/sqlite3.c aWalData[1] = pWal->hdr.aFrameCksum[0]; pWal 51507 ext/sqlite3/libsqlite/sqlite3.c aWalData[2] = pWal->hdr.aFrameCksum[1]; pWal 51508 ext/sqlite3/libsqlite/sqlite3.c aWalData[3] = pWal->nCkpt; pWal 51517 ext/sqlite3/libsqlite/sqlite3.c SQLITE_PRIVATE int sqlite3WalSavepointUndo(Wal *pWal, u32 *aWalData){ pWal 51520 ext/sqlite3/libsqlite/sqlite3.c assert( pWal->writeLock ); pWal 51521 ext/sqlite3/libsqlite/sqlite3.c assert( aWalData[3]!=pWal->nCkpt || aWalData[0]<=pWal->hdr.mxFrame ); pWal 51523 ext/sqlite3/libsqlite/sqlite3.c if( aWalData[3]!=pWal->nCkpt ){ pWal 51529 ext/sqlite3/libsqlite/sqlite3.c aWalData[3] = pWal->nCkpt; pWal 51532 ext/sqlite3/libsqlite/sqlite3.c if( aWalData[0]<pWal->hdr.mxFrame ){ pWal 51533 ext/sqlite3/libsqlite/sqlite3.c pWal->hdr.mxFrame = aWalData[0]; pWal 51534 ext/sqlite3/libsqlite/sqlite3.c pWal->hdr.aFrameCksum[0] = aWalData[1]; pWal 51535 ext/sqlite3/libsqlite/sqlite3.c pWal->hdr.aFrameCksum[1] = aWalData[2]; pWal 51536 ext/sqlite3/libsqlite/sqlite3.c walCleanupHash(pWal); pWal 51554 ext/sqlite3/libsqlite/sqlite3.c static int walRestartLog(Wal *pWal){ pWal 51558 ext/sqlite3/libsqlite/sqlite3.c if( pWal->readLock==0 ){ pWal 51559 ext/sqlite3/libsqlite/sqlite3.c volatile WalCkptInfo *pInfo = walCkptInfo(pWal); pWal 51560 ext/sqlite3/libsqlite/sqlite3.c assert( pInfo->nBackfill==pWal->hdr.mxFrame ); pWal 51564 ext/sqlite3/libsqlite/sqlite3.c rc = walLockExclusive(pWal, WAL_READ_LOCK(1), WAL_NREADER-1, 0); pWal 51575 ext/sqlite3/libsqlite/sqlite3.c walRestartHdr(pWal, salt1); pWal 51576 ext/sqlite3/libsqlite/sqlite3.c walUnlockExclusive(pWal, WAL_READ_LOCK(1), WAL_NREADER-1); pWal 51581 ext/sqlite3/libsqlite/sqlite3.c walUnlockShared(pWal, WAL_READ_LOCK(0)); pWal 51582 ext/sqlite3/libsqlite/sqlite3.c pWal->readLock = -1; pWal 51586 ext/sqlite3/libsqlite/sqlite3.c rc = walTryBeginRead(pWal, ¬Used, 1, ++cnt); pWal 51602 ext/sqlite3/libsqlite/sqlite3.c Wal *pWal; /* The complete WAL information */ pWal 51656 ext/sqlite3/libsqlite/sqlite3.c walEncodeFrame(p->pWal, pPage->pgno, nTruncate, pData, aFrame); pWal 51669 ext/sqlite3/libsqlite/sqlite3.c Wal *pWal, /* Wal handle to write to */ pWal 51686 ext/sqlite3/libsqlite/sqlite3.c assert( pWal->writeLock ); pWal 51695 ext/sqlite3/libsqlite/sqlite3.c pWal, cnt, pWal->hdr.mxFrame, isCommit ? "Commit" : "Spill")); pWal 51702 ext/sqlite3/libsqlite/sqlite3.c if( SQLITE_OK!=(rc = walRestartLog(pWal)) ){ pWal 51710 ext/sqlite3/libsqlite/sqlite3.c iFrame = pWal->hdr.mxFrame; pWal 51718 ext/sqlite3/libsqlite/sqlite3.c sqlite3Put4byte(&aWalHdr[12], pWal->nCkpt); pWal 51719 ext/sqlite3/libsqlite/sqlite3.c if( pWal->nCkpt==0 ) sqlite3_randomness(8, pWal->hdr.aSalt); pWal 51720 ext/sqlite3/libsqlite/sqlite3.c memcpy(&aWalHdr[16], pWal->hdr.aSalt, 8); pWal 51725 ext/sqlite3/libsqlite/sqlite3.c pWal->szPage = szPage; pWal 51726 ext/sqlite3/libsqlite/sqlite3.c pWal->hdr.bigEndCksum = SQLITE_BIGENDIAN; pWal 51727 ext/sqlite3/libsqlite/sqlite3.c pWal->hdr.aFrameCksum[0] = aCksum[0]; pWal 51728 ext/sqlite3/libsqlite/sqlite3.c pWal->hdr.aFrameCksum[1] = aCksum[1]; pWal 51729 ext/sqlite3/libsqlite/sqlite3.c pWal->truncateOnCommit = 1; pWal 51731 ext/sqlite3/libsqlite/sqlite3.c rc = sqlite3OsWrite(pWal->pWalFd, aWalHdr, sizeof(aWalHdr), 0); pWal 51732 ext/sqlite3/libsqlite/sqlite3.c WALTRACE(("WAL%p: wal-header write %s\n", pWal, rc ? "failed" : "ok")); pWal 51744 ext/sqlite3/libsqlite/sqlite3.c if( pWal->syncHeader && sync_flags ){ pWal 51745 ext/sqlite3/libsqlite/sqlite3.c rc = sqlite3OsSync(pWal->pWalFd, sync_flags & SQLITE_SYNC_MASK); pWal 51749 ext/sqlite3/libsqlite/sqlite3.c assert( (int)pWal->szPage==szPage ); pWal 51752 ext/sqlite3/libsqlite/sqlite3.c w.pWal = pWal; pWal 51753 ext/sqlite3/libsqlite/sqlite3.c w.pFd = pWal->pWalFd; pWal 51787 ext/sqlite3/libsqlite/sqlite3.c if( pWal->padToSectorBoundary ){ pWal 51788 ext/sqlite3/libsqlite/sqlite3.c int sectorSize = sqlite3SectorSize(pWal->pWalFd); pWal 51805 ext/sqlite3/libsqlite/sqlite3.c if( isCommit && pWal->truncateOnCommit && pWal->mxWalSize>=0 ){ pWal 51806 ext/sqlite3/libsqlite/sqlite3.c i64 sz = pWal->mxWalSize; pWal 51807 ext/sqlite3/libsqlite/sqlite3.c if( walFrameOffset(iFrame+nExtra+1, szPage)>pWal->mxWalSize ){ pWal 51810 ext/sqlite3/libsqlite/sqlite3.c walLimitSize(pWal, sz); pWal 51811 ext/sqlite3/libsqlite/sqlite3.c pWal->truncateOnCommit = 0; pWal 51819 ext/sqlite3/libsqlite/sqlite3.c iFrame = pWal->hdr.mxFrame; pWal 51822 ext/sqlite3/libsqlite/sqlite3.c rc = walIndexAppend(pWal, iFrame, p->pgno); pWal 51827 ext/sqlite3/libsqlite/sqlite3.c rc = walIndexAppend(pWal, iFrame, pLast->pgno); pWal 51832 ext/sqlite3/libsqlite/sqlite3.c pWal->hdr.szPage = (u16)((szPage&0xff00) | (szPage>>16)); pWal 51835 ext/sqlite3/libsqlite/sqlite3.c pWal->hdr.mxFrame = iFrame; pWal 51837 ext/sqlite3/libsqlite/sqlite3.c pWal->hdr.iChange++; pWal 51838 ext/sqlite3/libsqlite/sqlite3.c pWal->hdr.nPage = nTruncate; pWal 51842 ext/sqlite3/libsqlite/sqlite3.c walIndexWriteHdr(pWal); pWal 51843 ext/sqlite3/libsqlite/sqlite3.c pWal->iCallback = iFrame; pWal 51847 ext/sqlite3/libsqlite/sqlite3.c WALTRACE(("WAL%p: frame write %s\n", pWal, rc ? "failed" : "ok")); pWal 51862 ext/sqlite3/libsqlite/sqlite3.c Wal *pWal, /* Wal connection */ pWal 51877 ext/sqlite3/libsqlite/sqlite3.c assert( pWal->ckptLock==0 ); pWal 51878 ext/sqlite3/libsqlite/sqlite3.c assert( pWal->writeLock==0 ); pWal 51884 ext/sqlite3/libsqlite/sqlite3.c if( pWal->readOnly ) return SQLITE_READONLY; pWal 51885 ext/sqlite3/libsqlite/sqlite3.c WALTRACE(("WAL%p: checkpoint begins\n", pWal)); pWal 51889 ext/sqlite3/libsqlite/sqlite3.c rc = walLockExclusive(pWal, WAL_CKPT_LOCK, 1, 0); pWal 51901 ext/sqlite3/libsqlite/sqlite3.c pWal->ckptLock = 1; pWal 51913 ext/sqlite3/libsqlite/sqlite3.c rc = walBusyLock(pWal, xBusy, pBusyArg, WAL_WRITE_LOCK, 1); pWal 51915 ext/sqlite3/libsqlite/sqlite3.c pWal->writeLock = 1; pWal 51925 ext/sqlite3/libsqlite/sqlite3.c rc = walIndexReadHdr(pWal, &isChanged); pWal 51926 ext/sqlite3/libsqlite/sqlite3.c if( isChanged && pWal->pDbFd->pMethods->iVersion>=3 ){ pWal 51927 ext/sqlite3/libsqlite/sqlite3.c sqlite3OsUnfetch(pWal->pDbFd, 0, 0); pWal 51933 ext/sqlite3/libsqlite/sqlite3.c if( pWal->hdr.mxFrame && walPagesize(pWal)!=nBuf ){ pWal 51936 ext/sqlite3/libsqlite/sqlite3.c rc = walCheckpoint(pWal, eMode2, xBusy2, pBusyArg, sync_flags, zBuf); pWal 51941 ext/sqlite3/libsqlite/sqlite3.c if( pnLog ) *pnLog = (int)pWal->hdr.mxFrame; pWal 51942 ext/sqlite3/libsqlite/sqlite3.c if( pnCkpt ) *pnCkpt = (int)(walCkptInfo(pWal)->nBackfill); pWal 51953 ext/sqlite3/libsqlite/sqlite3.c memset(&pWal->hdr, 0, sizeof(WalIndexHdr)); pWal 51957 ext/sqlite3/libsqlite/sqlite3.c sqlite3WalEndWriteTransaction(pWal); pWal 51958 ext/sqlite3/libsqlite/sqlite3.c walUnlockExclusive(pWal, WAL_CKPT_LOCK, 1); pWal 51959 ext/sqlite3/libsqlite/sqlite3.c pWal->ckptLock = 0; pWal 51960 ext/sqlite3/libsqlite/sqlite3.c WALTRACE(("WAL%p: checkpoint %s\n", pWal, rc ? "failed" : "ok")); pWal 51969 ext/sqlite3/libsqlite/sqlite3.c SQLITE_PRIVATE int sqlite3WalCallback(Wal *pWal){ pWal 51971 ext/sqlite3/libsqlite/sqlite3.c if( pWal ){ pWal 51972 ext/sqlite3/libsqlite/sqlite3.c ret = pWal->iCallback; pWal 51973 ext/sqlite3/libsqlite/sqlite3.c pWal->iCallback = 0; pWal 52002 ext/sqlite3/libsqlite/sqlite3.c SQLITE_PRIVATE int sqlite3WalExclusiveMode(Wal *pWal, int op){ pWal 52004 ext/sqlite3/libsqlite/sqlite3.c assert( pWal->writeLock==0 ); pWal 52005 ext/sqlite3/libsqlite/sqlite3.c assert( pWal->exclusiveMode!=WAL_HEAPMEMORY_MODE || op==-1 ); pWal 52013 ext/sqlite3/libsqlite/sqlite3.c assert( pWal->readLock>=0 || pWal->lockError ); pWal 52014 ext/sqlite3/libsqlite/sqlite3.c assert( pWal->readLock>=0 || (op<=0 && pWal->exclusiveMode==0) ); pWal 52017 ext/sqlite3/libsqlite/sqlite3.c if( pWal->exclusiveMode ){ pWal 52018 ext/sqlite3/libsqlite/sqlite3.c pWal->exclusiveMode = 0; pWal 52019 ext/sqlite3/libsqlite/sqlite3.c if( walLockShared(pWal, WAL_READ_LOCK(pWal->readLock))!=SQLITE_OK ){ pWal 52020 ext/sqlite3/libsqlite/sqlite3.c pWal->exclusiveMode = 1; pWal 52022 ext/sqlite3/libsqlite/sqlite3.c rc = pWal->exclusiveMode==0; pWal 52028 ext/sqlite3/libsqlite/sqlite3.c assert( pWal->exclusiveMode==0 ); pWal 52029 ext/sqlite3/libsqlite/sqlite3.c assert( pWal->readLock>=0 ); pWal 52030 ext/sqlite3/libsqlite/sqlite3.c walUnlockShared(pWal, WAL_READ_LOCK(pWal->readLock)); pWal 52031 ext/sqlite3/libsqlite/sqlite3.c pWal->exclusiveMode = 1; pWal 52034 ext/sqlite3/libsqlite/sqlite3.c rc = pWal->exclusiveMode==0; pWal 52044 ext/sqlite3/libsqlite/sqlite3.c SQLITE_PRIVATE int sqlite3WalHeapMemory(Wal *pWal){ pWal 52045 ext/sqlite3/libsqlite/sqlite3.c return (pWal && pWal->exclusiveMode==WAL_HEAPMEMORY_MODE ); pWal 52054 ext/sqlite3/libsqlite/sqlite3.c SQLITE_PRIVATE int sqlite3WalFramesize(Wal *pWal){ pWal 52055 ext/sqlite3/libsqlite/sqlite3.c assert( pWal==0 || pWal->readLock>=0 ); pWal 52056 ext/sqlite3/libsqlite/sqlite3.c return (pWal ? pWal->szPage : 0);