From: dan Date: Wed, 9 Jun 2010 16:58:49 +0000 (+0000) Subject: When restarting (wrapping) a log file, set all unused aReadMark[] slots to READMARK_N... X-Git-Tag: version-3.7.2~283 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=199100e2cdd8cd54bbaacaaf5c2f7317f19587db;p=thirdparty%2Fsqlite.git 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 --- diff --git a/manifest b/manifest index 060d41f9d9..0e689ca0c8 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sfor\sticket\s[f973c7ac31]. -D 2010-06-09T15:47:11 +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-09T16:58:50 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.in a5cad1f8f3e021356bfcc6c77dc16f6f1952bbc3 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -224,7 +224,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 25ce19c8e175baf0c7d303243d38c0b2d4b1ba30 +F src/wal.c 2cdfea9a5e50e4dde48767e69e1fead2ff1781cd F src/wal.h 4ace25262452d17e7d3ec970c89ee17794004008 F src/walker.c 3112bb3afe1d85dc52317cb1d752055e9a781f8f F src/where.c 1c895bef33d0dfc7ed90fb1f74120435d210ea56 @@ -818,7 +818,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f -P c576827d55c156572b76cf7063e9f253ca6e7403 -R b48b1a3c1b5bb2e514409ff77e6be7cf +P 6eb058dda8d5f87b02378d8efd821fe64a525dcc +R a79b3d9ec9cc5a465c33dfd4ba1930ca U dan -Z f948595e6780591bfcc76536af294f11 +Z ad2df864c12e81459be20eda05356b43 diff --git a/manifest.uuid b/manifest.uuid index b4460a4323..0f65205059 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -6eb058dda8d5f87b02378d8efd821fe64a525dcc \ No newline at end of file +0797b10c0cc08ae38e26685d1f8331e37d428781 \ No newline at end of file diff --git a/src/wal.c b/src/wal.c index 1b90d384f4..017b844908 100644 --- a/src/wal.c +++ b/src/wal.c @@ -2217,13 +2217,16 @@ static int walRestartLog(Wal *pWal){ ** safe and means there is no special case for sqlite3WalUndo() ** to handle if this transaction is rolled back. */ + int i; /* Loop counter */ u32 *aSalt = pWal->hdr.aSalt; /* Big-endian salt values */ pWal->nCkpt++; pWal->hdr.mxFrame = 0; sqlite3Put4byte((u8*)&aSalt[0], 1 + sqlite3Get4byte((u8*)&aSalt[0])); sqlite3_randomness(4, &aSalt[1]); walIndexWriteHdr(pWal); - memset((void*)pInfo, 0, sizeof(*pInfo)); + pInfo->nBackfill = 0; + for(i=1; iaReadMark[i] = READMARK_NOT_USED; + assert( pInfo->aReadMark[0]==0 ); walUnlockExclusive(pWal, WAL_READ_LOCK(1), WAL_NREADER-1); } }