diff options
-rw-r--r-- | manifest | 24 | ||||
-rw-r--r-- | manifest.uuid | 2 | ||||
-rw-r--r-- | src/os_unix.c | 16 | ||||
-rw-r--r-- | src/wal.c | 4 |
4 files changed, 23 insertions, 23 deletions
@@ -1,8 +1,8 @@ -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 -C Initial\scode\sfor\sincremental\scheckpoint\sin\sWAL\smode.\s\sThis\scheck-in\scompiles\non\sunix\sand\sruns\sas\slong\sas\syou\sdo\snot\sengage\sWAL\smode.\s\sWAL\smode\scrashes\sand\nburns.\s\sConsider\sthis\scheck-in\sa\sbaseline\simplementation\sfor\sgetting\sthe\snew\ncapability\sup\sand\srunning. -D 2010-05-30T19:55:16 +C WAL\sruns\sbut\squickly\sdeadlocks. +D 2010-05-31T01:41:16 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.in a5cad1f8f3e021356bfcc6c77dc16f6f1952bbc3 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -155,7 +155,7 @@ F src/os.c 1516984144e26734f97748f891f1a04f9e294c2e F src/os.h 6f604986f0ef0ca288c2330b16051ff70b431e8c F src/os_common.h a8f95b81eca8a1ab8593d23e94f8a35f35d4078f F src/os_os2.c 665876d5eec7585226b0a1cf5e18098de2b2da19 -F src/os_unix.c df0c87b2d55772d55de8158fb43d107d2f7a98a9 +F src/os_unix.c f95ffaf6874cbd3432ffad6fb49c86a084a2db72 F src/os_win.c 81dd8f5434b3b73b1f1567a784811601b6437ce3 F src/pager.c f7128f02623beab9462ca6e73516cf73c49186f8 F src/pager.h 76466c3a5af56943537f68b1f16567101a0cd1d0 @@ -227,7 +227,7 @@ F src/vdbeblob.c 5327132a42a91e8b7acfb60b9d2c3b1c5c863e0e F src/vdbemem.c 2a82f455f6ca6f78b59fb312f96054c04ae0ead1 F src/vdbetrace.c 864cef96919323482ebd9986f2132435115e9cc2 F src/vtab.c a0f8a40274e4261696ef57aa806de2776ab72cda -F src/wal.c ef02a5f4d4d652ee4d94ac88822a73a1411d10d6 +F src/wal.c 016ea4ed0323907bc8139622c9dae5ab75ec364c F src/wal.h 1c1c9feb629b7f4afcbe0b47f80f47c5551d3a02 F src/walker.c 3112bb3afe1d85dc52317cb1d752055e9a781f8f F src/where.c 75fee9e255b62f773fcadd1d1f25b6f63ac7a356 @@ -818,18 +818,14 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f -P e9e5b1001986348ef0f88c19de87b94559a5451e -R 3cb5cfcba75aef739a2ee45b712a8927 -T *bgcolor * #d0c0ff -T *branch * wal-incr-ckpt -T *sym-wal-incr-ckpt * -T -sym-trunk * +P ef3ba7a17ff90674d702e5694b9e792851ab6998 +R 651c029120b6d93a925820592e49e0df U drh -Z ed18a54c191ab99d049f2d0a8d31b002 +Z fe262abca6c7606bad6380cede9b085d -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) -iD8DBQFMAsKpoxKgR168RlERAvtWAJ99mBxnLNXe1beJRyx/6q6ucCHBKgCfaA4I -OHb/Ln2lM1z/XtiNWshOkow= -=bcY+ +iD8DBQFMAxPBoxKgR168RlERAvPlAJ9ajxNPryXB6MLg8ylPwxiINjVplACfZFw5 +H866uySmTIu3rUiQvqGaMCI= +=yN+5 -----END PGP SIGNATURE----- diff --git a/manifest.uuid b/manifest.uuid index a92cc2e88..a7687e518 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -ef3ba7a17ff90674d702e5694b9e792851ab6998
\ No newline at end of file +ace58acbf1fad13d2be96cafebc3a22875098d03
\ No newline at end of file diff --git a/src/os_unix.c b/src/os_unix.c index cdba3d9f1..3b33edc93 100644 --- a/src/os_unix.c +++ b/src/os_unix.c @@ -3180,7 +3180,7 @@ struct unixShm { /* ** Constants used for locking */ -#define UNIX_SHM_BASE 80 /* Byte offset of the first lock byte */ +#define UNIX_SHM_BASE 81 /* Byte offset of the first lock byte */ #define UNIX_SHM_DMS 80 /* The deadman switch lock */ #ifdef SQLITE_DEBUG @@ -3241,13 +3241,13 @@ static int unixShmSystemLock( assert( n==1 || lockType!=F_RDLCK ); /* Locks are within range */ - assert( n>=1 && ofst>=0 && ofst+n<SQLITE_SHM_NLOCK ); + assert( n>=1 && n<SQLITE_SHM_NLOCK ); /* Initialize the locking parameters */ memset(&f, 0, sizeof(f)); f.l_type = lockType; f.l_whence = SEEK_SET; - f.l_start = ofst+UNIX_SHM_BASE; + f.l_start = ofst; f.l_len = n; rc = fcntl(pShmNode->h, F_SETLK, &f); @@ -3621,7 +3621,7 @@ static int unixShmLock( assert( pShmNode==pDbFd->pInode->pShmNode ); assert( pShmNode->pInode==pDbFd->pInode ); - assert( ofst>=0 && ofst+n<SQLITE_SHM_NLOCK ); + assert( ofst>=0 && ofst+n<=SQLITE_SHM_NLOCK ); assert( n>=1 ); assert( flags==(SQLITE_SHM_LOCK | SQLITE_SHM_SHARED) || flags==(SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE) @@ -3629,7 +3629,7 @@ static int unixShmLock( || flags==(SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE) ); assert( n==1 || (flags & SQLITE_SHM_EXCLUSIVE)!=0 ); - mask = (1<<(ofst+n+1)) - (1<<(ofst+1)); + mask = (1<<(ofst+n)) - (1<<ofst); assert( n>1 || mask==(1<<ofst) ); sqlite3_mutex_enter(pShmNode->mutex); if( flags & SQLITE_SHM_UNLOCK ){ @@ -3644,7 +3644,7 @@ static int unixShmLock( /* Unlock the system-level locks */ if( (mask & allMask)==0 ){ - rc = unixShmSystemLock(pShmNode, F_UNLCK, ofst+1, n); + rc = unixShmSystemLock(pShmNode, F_UNLCK, ofst+UNIX_SHM_BASE, n); }else{ rc = SQLITE_OK; } @@ -3673,7 +3673,7 @@ static int unixShmLock( /* Get shared locks at the system level, if necessary */ if( rc==SQLITE_OK ){ if( (allShared & mask)==0 ){ - rc = unixShmSystemLock(pShmNode, F_RDLCK, ofst+1, n); + rc = unixShmSystemLock(pShmNode, F_RDLCK, ofst+UNIX_SHM_BASE, n); }else{ rc = SQLITE_OK; } @@ -3699,7 +3699,7 @@ static int unixShmLock( ** also mark the local connection as being locked. */ if( rc==SQLITE_OK ){ - rc = unixShmSystemLock(pShmNode, F_WRLCK, ofst+1, n); + rc = unixShmSystemLock(pShmNode, F_WRLCK, ofst+UNIX_SHM_BASE, n); if( rc==SQLITE_OK ){ p->sharedMask &= ~mask; p->exclMask |= mask; @@ -1933,6 +1933,7 @@ int sqlite3WalBeginWriteTransaction(Wal *pWal){ if( rc ){ return rc; } + pWal->writeLock = 1; /* If another connection has written to the database file since the ** time the read transaction on this connection was started, then @@ -1941,10 +1942,12 @@ int sqlite3WalBeginWriteTransaction(Wal *pWal){ rc = walIndexMap(pWal, pWal->hdr.mxFrame); if( rc ){ walUnlockExclusive(pWal, WAL_WRITE_LOCK, 1); + pWal->writeLock = 0; return rc; } if( memcmp(&pWal->hdr, (void*)pWal->pWiData, sizeof(WalIndexHdr))!=0 ){ walUnlockExclusive(pWal, WAL_WRITE_LOCK, 1); + pWal->writeLock = 0; walIndexUnmap(pWal); return SQLITE_BUSY; } @@ -1968,6 +1971,7 @@ int sqlite3WalBeginWriteTransaction(Wal *pWal){ walUnlockExclusive(pWal, WAL_READ_LOCK(1), WAL_NREADER-1); } walUnlockShared(pWal, WAL_READ_LOCK(0)); + pWal->readLock = -1; do{ int notUsed; rc = walTryBeginRead(pWal, ¬Used, 1); |