aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--manifest24
-rw-r--r--manifest.uuid2
-rw-r--r--src/os_unix.c16
-rw-r--r--src/wal.c4
4 files changed, 23 insertions, 23 deletions
diff --git a/manifest b/manifest
index 78015b2b1..606555928 100644
--- a/manifest
+++ b/manifest
@@ -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;
diff --git a/src/wal.c b/src/wal.c
index 0bdd4adbe..0d1d0e42b 100644
--- a/src/wal.c
+++ b/src/wal.c
@@ -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, &notUsed, 1);