When restarting (wrapping) a log file, set all unused aReadMark[] slots to READMARK_NOT_USED instead of 0. Setting them to 0 does not cause a problem, but may cause SQLite to obtain and release a few more file locks than would otherwise be necessary.

FossilOrigin-Name: 0797b10c0cc08ae38e26685d1f8331e37d428781
This commit is contained in:
dan 2010-06-09 16:58:49 +00:00
parent 6ac4339439
commit 199100e2cd
3 changed files with 11 additions and 8 deletions

View File

@ -1,5 +1,5 @@
C Fix\sfor\sticket\s[f973c7ac31]. C When\srestarting\s(wrapping)\sa\slog\sfile,\sset\sall\sunused\saReadMark[]\sslots\sto\sREADMARK_NOT_USED\sinstead\sof\s0.\sSetting\sthem\sto\s0\sdoes\snot\scause\sa\sproblem,\sbut\smay\scause\sSQLite\sto\sobtain\sand\srelease\sa\sfew\smore\sfile\slocks\sthan\swould\sotherwise\sbe\snecessary.
D 2010-06-09T15:47:11 D 2010-06-09T16:58:50
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
@ -224,7 +224,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 25ce19c8e175baf0c7d303243d38c0b2d4b1ba30 F src/wal.c 2cdfea9a5e50e4dde48767e69e1fead2ff1781cd
F src/wal.h 4ace25262452d17e7d3ec970c89ee17794004008 F src/wal.h 4ace25262452d17e7d3ec970c89ee17794004008
F src/walker.c 3112bb3afe1d85dc52317cb1d752055e9a781f8f F src/walker.c 3112bb3afe1d85dc52317cb1d752055e9a781f8f
F src/where.c 1c895bef33d0dfc7ed90fb1f74120435d210ea56 F src/where.c 1c895bef33d0dfc7ed90fb1f74120435d210ea56
@ -818,7 +818,7 @@ 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 c576827d55c156572b76cf7063e9f253ca6e7403 P 6eb058dda8d5f87b02378d8efd821fe64a525dcc
R b48b1a3c1b5bb2e514409ff77e6be7cf R a79b3d9ec9cc5a465c33dfd4ba1930ca
U dan U dan
Z f948595e6780591bfcc76536af294f11 Z ad2df864c12e81459be20eda05356b43

View File

@ -1 +1 @@
6eb058dda8d5f87b02378d8efd821fe64a525dcc 0797b10c0cc08ae38e26685d1f8331e37d428781

View File

@ -2217,13 +2217,16 @@ static int walRestartLog(Wal *pWal){
** safe and means there is no special case for sqlite3WalUndo() ** safe and means there is no special case for sqlite3WalUndo()
** to handle if this transaction is rolled back. ** to handle if this transaction is rolled back.
*/ */
int i; /* Loop counter */
u32 *aSalt = pWal->hdr.aSalt; /* Big-endian salt values */ u32 *aSalt = pWal->hdr.aSalt; /* Big-endian salt values */
pWal->nCkpt++; pWal->nCkpt++;
pWal->hdr.mxFrame = 0; pWal->hdr.mxFrame = 0;
sqlite3Put4byte((u8*)&aSalt[0], 1 + sqlite3Get4byte((u8*)&aSalt[0])); sqlite3Put4byte((u8*)&aSalt[0], 1 + sqlite3Get4byte((u8*)&aSalt[0]));
sqlite3_randomness(4, &aSalt[1]); sqlite3_randomness(4, &aSalt[1]);
walIndexWriteHdr(pWal); walIndexWriteHdr(pWal);
memset((void*)pInfo, 0, sizeof(*pInfo)); pInfo->nBackfill = 0;
for(i=1; i<WAL_NREADER; i++) pInfo->aReadMark[i] = READMARK_NOT_USED;
assert( pInfo->aReadMark[0]==0 );
walUnlockExclusive(pWal, WAL_READ_LOCK(1), WAL_NREADER-1); walUnlockExclusive(pWal, WAL_READ_LOCK(1), WAL_NREADER-1);
} }
} }