]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
A better solution to being unable to find a unique master-journal filename:
authordrh <drh@noemail.net>
Fri, 16 Dec 2011 01:21:31 +0000 (01:21 +0000)
committerdrh <drh@noemail.net>
Fri, 16 Dec 2011 01:21:31 +0000 (01:21 +0000)
just delete an existing master-journal and reuse it.

FossilOrigin-Name: 2685c2b949061f18bf6a4940eac8c8148873abb6

manifest
manifest.uuid
src/vdbeaux.c

index c6cfc989a6dcf7e850de2e65546ea8ec30dea826..322d29352809e45f5df1d1c16407ca7e7e9a1eca 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Make\ssure\sthe\santipenultimate\scharacter\sof\smaster-journal\sfilenames\sis\sa\s"9"\nin\sorder\sto\savoid\scollisions\swith\sother\sfiles\sin\s8+3\sfilename\smode.\s\sAlso,\nlimit\sthe\snumber\sof\sattempts\sat\sfinding\sa\sunique\smaster-journal\sfilename.
-D 2011-12-16T00:33:04.352
+C A\sbetter\ssolution\sto\sbeing\sunable\sto\sfind\sa\sunique\smaster-journal\sfilename:\njust\sdelete\san\sexisting\smaster-journal\sand\sreuse\sit.
+D 2011-12-16T01:21:31.882
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in 5b4a3e12a850b021547e43daf886b25133b44c07
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -243,7 +243,7 @@ F src/vdbe.c a7ab9993ec5a4d9479dc99671faec061fbf9b889
 F src/vdbe.h f0725ee997db869ecae5bb70a71612aabeca7755
 F src/vdbeInt.h 9498fc98a2c9e349a4ef13455ff5a3e898f40176
 F src/vdbeapi.c 4dbba7f94f127f6ea8d2d0505ee1f98e5ffbf546
-F src/vdbeaux.c 896ce3c48bf1bf27a1330589a20daa2db0222381
+F src/vdbeaux.c 7bae4d94d7e41e8005824a6d1da54b73d47f52b1
 F src/vdbeblob.c 32f2a4899d67f69634ea4dd93e3f651936d732cb
 F src/vdbemem.c 2fc78b3e0fabcc1eaa23cd79dd2e30e6dcfe1e56
 F src/vdbesort.c 468d43c057063e54da4f1988b38b4f46d60e7790
@@ -978,7 +978,7 @@ F tool/tostr.awk e75472c2f98dd76e06b8c9c1367f4ab07e122d06
 F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
 F tool/warnings-clang.sh 9f406d66e750e8ac031c63a9ef3248aaa347ef2a
 F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
-P 3af1feaa35d3fb2e7be550cd32a727001b874938
-R 398b3e3805c532cf24ac8d99750e0da2
+P 34a0483605d36e6cf03065ed0df33fb1f7c8a272
+R dac1ae186d64bf5089bb1df4a91a9793
 U drh
-Z ebbc2fb95389a75c4e570b61ca8c6d99
+Z cdecba57f424e5a33e7e2e3955b5bd95
index b3c3bab44257848e6afa95224ec287af73e1c036..6fdf08c33482aa763a6c0839a8d9e1ddc0aa2c4b 100644 (file)
@@ -1 +1 @@
-34a0483605d36e6cf03065ed0df33fb1f7c8a272
\ No newline at end of file
+2685c2b949061f18bf6a4940eac8c8148873abb6
\ No newline at end of file
index 2e01c982e59b4849eb81dc0b577f9f46f3ffb659..6e183d0b8c4884c51e506a941ba15fd4c5faf132 100644 (file)
@@ -1825,25 +1825,24 @@ static int vdbeCommit(sqlite3 *db, Vdbe *p){
     i64 offset = 0;
     int res;
     int retryCount = 0;
+    int nMainFile;
 
     /* Select a master journal file name */
+    nMainFile = sqlite3Strlen30(zMainFile);
+    zMaster = sqlite3MPrintf(db, "%s-mjXXXXXX9XX", zMainFile);
+    if( zMaster==0 ) return SQLITE_NOMEM;
     do {
       u32 iRandom;
       if( retryCount++>100 ){
-        sqlite3_log(SQLITE_FULL, "cannot create a master journal filename");
-        rc = SQLITE_FULL;
+        sqlite3OsDelete(pVfs, zMaster, 0);
         break;
       }
-      sqlite3DbFree(db, zMaster);
       sqlite3_randomness(sizeof(iRandom), &iRandom);
-      zMaster = sqlite3MPrintf(db, "%s-mj%06X9%02X", zMainFile,
+      sqlite3_snprintf(13, &zMaster[nMainFile], "-mj%06X9%02X",
                                (iRandom>>8)&0xffffff, iRandom&0xff);
-      if( !zMaster ){
-        return SQLITE_NOMEM;
-      }
       /* The antipenultimate character of the master journal name must
       ** be "9" to avoid name collisions when using 8+3 filenames. */
-      assert( zMaster[strlen(zMaster)-3]=='9' );
+      assert( zMaster[sqlite3Strlen30(zMaster)-3]=='9' );
       sqlite3FileSuffix3(zMainFile, zMaster);
       rc = sqlite3OsAccess(pVfs, zMaster, SQLITE_ACCESS_EXISTS, &res);
     }while( rc==SQLITE_OK && res );