mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-05 15:55:57 +03:00
WAL runs but quickly deadlocks.
FossilOrigin-Name: ace58acbf1fad13d2be96cafebc3a22875098d03
This commit is contained in:
24
manifest
24
manifest
@@ -1,8 +1,8 @@
|
|||||||
-----BEGIN PGP SIGNED MESSAGE-----
|
-----BEGIN PGP SIGNED MESSAGE-----
|
||||||
Hash: SHA1
|
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.
|
C WAL\sruns\sbut\squickly\sdeadlocks.
|
||||||
D 2010-05-30T19:55:16
|
D 2010-05-31T01:41:16
|
||||||
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
|
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
|
||||||
F Makefile.in a5cad1f8f3e021356bfcc6c77dc16f6f1952bbc3
|
F Makefile.in a5cad1f8f3e021356bfcc6c77dc16f6f1952bbc3
|
||||||
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
|
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
|
||||||
@@ -155,7 +155,7 @@ F src/os.c 1516984144e26734f97748f891f1a04f9e294c2e
|
|||||||
F src/os.h 6f604986f0ef0ca288c2330b16051ff70b431e8c
|
F src/os.h 6f604986f0ef0ca288c2330b16051ff70b431e8c
|
||||||
F src/os_common.h a8f95b81eca8a1ab8593d23e94f8a35f35d4078f
|
F src/os_common.h a8f95b81eca8a1ab8593d23e94f8a35f35d4078f
|
||||||
F src/os_os2.c 665876d5eec7585226b0a1cf5e18098de2b2da19
|
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/os_win.c 81dd8f5434b3b73b1f1567a784811601b6437ce3
|
||||||
F src/pager.c f7128f02623beab9462ca6e73516cf73c49186f8
|
F src/pager.c f7128f02623beab9462ca6e73516cf73c49186f8
|
||||||
F src/pager.h 76466c3a5af56943537f68b1f16567101a0cd1d0
|
F src/pager.h 76466c3a5af56943537f68b1f16567101a0cd1d0
|
||||||
@@ -227,7 +227,7 @@ F src/vdbeblob.c 5327132a42a91e8b7acfb60b9d2c3b1c5c863e0e
|
|||||||
F src/vdbemem.c 2a82f455f6ca6f78b59fb312f96054c04ae0ead1
|
F src/vdbemem.c 2a82f455f6ca6f78b59fb312f96054c04ae0ead1
|
||||||
F src/vdbetrace.c 864cef96919323482ebd9986f2132435115e9cc2
|
F src/vdbetrace.c 864cef96919323482ebd9986f2132435115e9cc2
|
||||||
F src/vtab.c a0f8a40274e4261696ef57aa806de2776ab72cda
|
F src/vtab.c a0f8a40274e4261696ef57aa806de2776ab72cda
|
||||||
F src/wal.c ef02a5f4d4d652ee4d94ac88822a73a1411d10d6
|
F src/wal.c 016ea4ed0323907bc8139622c9dae5ab75ec364c
|
||||||
F src/wal.h 1c1c9feb629b7f4afcbe0b47f80f47c5551d3a02
|
F src/wal.h 1c1c9feb629b7f4afcbe0b47f80f47c5551d3a02
|
||||||
F src/walker.c 3112bb3afe1d85dc52317cb1d752055e9a781f8f
|
F src/walker.c 3112bb3afe1d85dc52317cb1d752055e9a781f8f
|
||||||
F src/where.c 75fee9e255b62f773fcadd1d1f25b6f63ac7a356
|
F src/where.c 75fee9e255b62f773fcadd1d1f25b6f63ac7a356
|
||||||
@@ -818,18 +818,14 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
|
|||||||
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
|
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
|
||||||
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
|
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
|
||||||
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
|
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
|
||||||
P e9e5b1001986348ef0f88c19de87b94559a5451e
|
P ef3ba7a17ff90674d702e5694b9e792851ab6998
|
||||||
R 3cb5cfcba75aef739a2ee45b712a8927
|
R 651c029120b6d93a925820592e49e0df
|
||||||
T *bgcolor * #d0c0ff
|
|
||||||
T *branch * wal-incr-ckpt
|
|
||||||
T *sym-wal-incr-ckpt *
|
|
||||||
T -sym-trunk *
|
|
||||||
U drh
|
U drh
|
||||||
Z ed18a54c191ab99d049f2d0a8d31b002
|
Z fe262abca6c7606bad6380cede9b085d
|
||||||
-----BEGIN PGP SIGNATURE-----
|
-----BEGIN PGP SIGNATURE-----
|
||||||
Version: GnuPG v1.4.6 (GNU/Linux)
|
Version: GnuPG v1.4.6 (GNU/Linux)
|
||||||
|
|
||||||
iD8DBQFMAsKpoxKgR168RlERAvtWAJ99mBxnLNXe1beJRyx/6q6ucCHBKgCfaA4I
|
iD8DBQFMAxPBoxKgR168RlERAvPlAJ9ajxNPryXB6MLg8ylPwxiINjVplACfZFw5
|
||||||
OHb/Ln2lM1z/XtiNWshOkow=
|
H866uySmTIu3rUiQvqGaMCI=
|
||||||
=bcY+
|
=yN+5
|
||||||
-----END PGP SIGNATURE-----
|
-----END PGP SIGNATURE-----
|
||||||
|
@@ -1 +1 @@
|
|||||||
ef3ba7a17ff90674d702e5694b9e792851ab6998
|
ace58acbf1fad13d2be96cafebc3a22875098d03
|
@@ -3180,7 +3180,7 @@ struct unixShm {
|
|||||||
/*
|
/*
|
||||||
** Constants used for locking
|
** 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 */
|
#define UNIX_SHM_DMS 80 /* The deadman switch lock */
|
||||||
|
|
||||||
#ifdef SQLITE_DEBUG
|
#ifdef SQLITE_DEBUG
|
||||||
@@ -3241,13 +3241,13 @@ static int unixShmSystemLock(
|
|||||||
assert( n==1 || lockType!=F_RDLCK );
|
assert( n==1 || lockType!=F_RDLCK );
|
||||||
|
|
||||||
/* Locks are within range */
|
/* 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 */
|
/* Initialize the locking parameters */
|
||||||
memset(&f, 0, sizeof(f));
|
memset(&f, 0, sizeof(f));
|
||||||
f.l_type = lockType;
|
f.l_type = lockType;
|
||||||
f.l_whence = SEEK_SET;
|
f.l_whence = SEEK_SET;
|
||||||
f.l_start = ofst+UNIX_SHM_BASE;
|
f.l_start = ofst;
|
||||||
f.l_len = n;
|
f.l_len = n;
|
||||||
|
|
||||||
rc = fcntl(pShmNode->h, F_SETLK, &f);
|
rc = fcntl(pShmNode->h, F_SETLK, &f);
|
||||||
@@ -3621,7 +3621,7 @@ static int unixShmLock(
|
|||||||
|
|
||||||
assert( pShmNode==pDbFd->pInode->pShmNode );
|
assert( pShmNode==pDbFd->pInode->pShmNode );
|
||||||
assert( pShmNode->pInode==pDbFd->pInode );
|
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( n>=1 );
|
||||||
assert( flags==(SQLITE_SHM_LOCK | SQLITE_SHM_SHARED)
|
assert( flags==(SQLITE_SHM_LOCK | SQLITE_SHM_SHARED)
|
||||||
|| flags==(SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE)
|
|| flags==(SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE)
|
||||||
@@ -3629,7 +3629,7 @@ static int unixShmLock(
|
|||||||
|| flags==(SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE) );
|
|| flags==(SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE) );
|
||||||
assert( n==1 || (flags & SQLITE_SHM_EXCLUSIVE)!=0 );
|
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) );
|
assert( n>1 || mask==(1<<ofst) );
|
||||||
sqlite3_mutex_enter(pShmNode->mutex);
|
sqlite3_mutex_enter(pShmNode->mutex);
|
||||||
if( flags & SQLITE_SHM_UNLOCK ){
|
if( flags & SQLITE_SHM_UNLOCK ){
|
||||||
@@ -3644,7 +3644,7 @@ static int unixShmLock(
|
|||||||
|
|
||||||
/* Unlock the system-level locks */
|
/* Unlock the system-level locks */
|
||||||
if( (mask & allMask)==0 ){
|
if( (mask & allMask)==0 ){
|
||||||
rc = unixShmSystemLock(pShmNode, F_UNLCK, ofst+1, n);
|
rc = unixShmSystemLock(pShmNode, F_UNLCK, ofst+UNIX_SHM_BASE, n);
|
||||||
}else{
|
}else{
|
||||||
rc = SQLITE_OK;
|
rc = SQLITE_OK;
|
||||||
}
|
}
|
||||||
@@ -3673,7 +3673,7 @@ static int unixShmLock(
|
|||||||
/* Get shared locks at the system level, if necessary */
|
/* Get shared locks at the system level, if necessary */
|
||||||
if( rc==SQLITE_OK ){
|
if( rc==SQLITE_OK ){
|
||||||
if( (allShared & mask)==0 ){
|
if( (allShared & mask)==0 ){
|
||||||
rc = unixShmSystemLock(pShmNode, F_RDLCK, ofst+1, n);
|
rc = unixShmSystemLock(pShmNode, F_RDLCK, ofst+UNIX_SHM_BASE, n);
|
||||||
}else{
|
}else{
|
||||||
rc = SQLITE_OK;
|
rc = SQLITE_OK;
|
||||||
}
|
}
|
||||||
@@ -3699,7 +3699,7 @@ static int unixShmLock(
|
|||||||
** also mark the local connection as being locked.
|
** also mark the local connection as being locked.
|
||||||
*/
|
*/
|
||||||
if( rc==SQLITE_OK ){
|
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 ){
|
if( rc==SQLITE_OK ){
|
||||||
p->sharedMask &= ~mask;
|
p->sharedMask &= ~mask;
|
||||||
p->exclMask |= mask;
|
p->exclMask |= mask;
|
||||||
|
@@ -1933,6 +1933,7 @@ int sqlite3WalBeginWriteTransaction(Wal *pWal){
|
|||||||
if( rc ){
|
if( rc ){
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
pWal->writeLock = 1;
|
||||||
|
|
||||||
/* If another connection has written to the database file since the
|
/* If another connection has written to the database file since the
|
||||||
** time the read transaction on this connection was started, then
|
** time the read transaction on this connection was started, then
|
||||||
@@ -1941,10 +1942,12 @@ int sqlite3WalBeginWriteTransaction(Wal *pWal){
|
|||||||
rc = walIndexMap(pWal, pWal->hdr.mxFrame);
|
rc = walIndexMap(pWal, pWal->hdr.mxFrame);
|
||||||
if( rc ){
|
if( rc ){
|
||||||
walUnlockExclusive(pWal, WAL_WRITE_LOCK, 1);
|
walUnlockExclusive(pWal, WAL_WRITE_LOCK, 1);
|
||||||
|
pWal->writeLock = 0;
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
if( memcmp(&pWal->hdr, (void*)pWal->pWiData, sizeof(WalIndexHdr))!=0 ){
|
if( memcmp(&pWal->hdr, (void*)pWal->pWiData, sizeof(WalIndexHdr))!=0 ){
|
||||||
walUnlockExclusive(pWal, WAL_WRITE_LOCK, 1);
|
walUnlockExclusive(pWal, WAL_WRITE_LOCK, 1);
|
||||||
|
pWal->writeLock = 0;
|
||||||
walIndexUnmap(pWal);
|
walIndexUnmap(pWal);
|
||||||
return SQLITE_BUSY;
|
return SQLITE_BUSY;
|
||||||
}
|
}
|
||||||
@@ -1968,6 +1971,7 @@ int sqlite3WalBeginWriteTransaction(Wal *pWal){
|
|||||||
walUnlockExclusive(pWal, WAL_READ_LOCK(1), WAL_NREADER-1);
|
walUnlockExclusive(pWal, WAL_READ_LOCK(1), WAL_NREADER-1);
|
||||||
}
|
}
|
||||||
walUnlockShared(pWal, WAL_READ_LOCK(0));
|
walUnlockShared(pWal, WAL_READ_LOCK(0));
|
||||||
|
pWal->readLock = -1;
|
||||||
do{
|
do{
|
||||||
int notUsed;
|
int notUsed;
|
||||||
rc = walTryBeginRead(pWal, ¬Used, 1);
|
rc = walTryBeginRead(pWal, ¬Used, 1);
|
||||||
|
Reference in New Issue
Block a user