Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Reapply commits [837d82a929] and [c05e7dca17] that were accidentally overwritten. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | wal |
Files: | files | file ages | folders |
SHA1: |
598de52700ba13e3228289220a74fc62 |
User & Date: | dan 2010-04-30 16:24:46.000 |
Context
2010-04-30
| ||
16:38 | Fix a bug whereby upgrading from a READ_FULL to a WRITE lock, and then back to a read lock was dropping all WAL locks. (check-in: 55f5af5e17 user: dan tags: wal) | |
16:24 | Reapply commits [837d82a929] and [c05e7dca17] that were accidentally overwritten. (check-in: 598de52700 user: dan tags: wal) | |
16:19 | Add xShmXXX() methods to the test VFS in test_devsym.test. (check-in: 1d20342424 user: dan tags: wal) | |
Changes
Changes to src/wal.c.
︙ | ︙ | |||
780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 | Wal *pWal, /* Wal to close */ sqlite3_file *pFd, /* Database file */ int sync_flags, /* Flags to pass to OsSync() (or 0) */ u8 *zBuf /* Buffer of at least page-size bytes */ ){ int rc = SQLITE_OK; if( pWal ){ pWal->pVfs->xShmClose(pWal->pWIndex); sqlite3OsClose(pWal->pFd); sqlite3_free(pWal); } return rc; } /* ** Try to read the wal-index header. Attempt to verify the header | > > > > > > > > > > > > > > > > > > > > > > > > > > > | 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 | Wal *pWal, /* Wal to close */ sqlite3_file *pFd, /* Database file */ int sync_flags, /* Flags to pass to OsSync() (or 0) */ u8 *zBuf /* Buffer of at least page-size bytes */ ){ int rc = SQLITE_OK; if( pWal ){ int isDelete = 0; /* True to unlink wal and wal-index files */ /* If an EXCLUSIVE lock can be obtained on the database file (using the ** ordinary, rollback-mode locking methods, this guarantees that the ** connection associated with this log file is the only connection to ** the database. In this case checkpoint the database and unlink both ** the wal and wal-index files. ** ** The EXCLUSIVE lock is not released before returning. */ rc = sqlite3OsLock(pFd, SQLITE_LOCK_EXCLUSIVE); if( rc==SQLITE_OK ){ rc = walCheckpoint(pWal, pFd, sync_flags, zBuf); if( rc==SQLITE_OK ){ isDelete = 1; } walIndexUnmap(pWal); } pWal->pVfs->xShmClose(pWal->pWIndex); sqlite3OsClose(pWal->pFd); if( isDelete ){ int nWal; char *zWal = &((char *)pWal->pFd)[pWal->pVfs->szOsFile]; sqlite3OsDelete(pWal->pVfs, zWal, 0); nWal = sqlite3Strlen30(zWal); memcpy(&zWal[nWal], "-index", 7); pWal->pVfs->xShmDelete(pWal->pVfs, zWal); } sqlite3_free(pWal); } return rc; } /* ** Try to read the wal-index header. Attempt to verify the header |
︙ | ︙ | |||
1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 | ** been overwritten by another writer, SQLITE_BUSY is returned. */ int sqlite3WalWriteLock(Wal *pWal, int op){ int rc; if( op ){ assert( pWal->lockState == SQLITE_SHM_READ ); rc = walSetLock(pWal, SQLITE_SHM_WRITE); }else if( pWal->lockState==SQLITE_SHM_WRITE ){ rc = walSetLock(pWal, SQLITE_SHM_READ); } return rc; } /* | > > > > > > > > > > > > > > > > > | 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 | ** been overwritten by another writer, SQLITE_BUSY is returned. */ int sqlite3WalWriteLock(Wal *pWal, int op){ int rc; if( op ){ assert( pWal->lockState == SQLITE_SHM_READ ); rc = walSetLock(pWal, SQLITE_SHM_WRITE); /* If this connection is not reading the most recent database snapshot, ** it is not possible to write to the database. In this case release ** the write locks and return SQLITE_BUSY. */ if( rc==SQLITE_OK ){ rc = walIndexMap(pWal, -1); if( rc==SQLITE_OK && memcmp(&pWal->hdr, pWal->pWiData, sizeof(WalIndexHdr)) ){ rc = SQLITE_BUSY; } walIndexUnmap(pWal); if( rc!=SQLITE_OK ){ walSetLock(pWal, SQLITE_SHM_READ); } } }else if( pWal->lockState==SQLITE_SHM_WRITE ){ rc = walSetLock(pWal, SQLITE_SHM_READ); } return rc; } /* |
︙ | ︙ |