]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Omit the maximum loop count on the random name chooser in the VACUUM command.
authordrh <drh@noemail.net>
Sat, 20 Nov 2004 19:18:55 +0000 (19:18 +0000)
committerdrh <drh@noemail.net>
Sat, 20 Nov 2004 19:18:55 +0000 (19:18 +0000)
Add a comment to explain why this is safe and does not result in an
infinite loop.  Ticket #1009. (CVS 2122)

FossilOrigin-Name: 1241086f23a2ef7aef85139817f0c1b90140481d

manifest
manifest.uuid
src/vacuum.c

index c8ecb8db7a6460848597b8ec3f7f4febc1db81b1..af773c7422953f6a69d76878229bd9cf68808798 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Rig\sthe\ssqliteMalloc()\sroutine\sso\sthat\swe\scan\smake\sit\sfail\smultiple\stimes\nin\sa\srow.\s\sModify\sthe\smalloc.test\sprocedure\sto\smake\smalloc\sfail\sin\sthis\nway\sand\sverify\sthat\sthe\sfailures\sare\sstill\shandled\scorrectly.\s(CVS\s2121)
-D 2004-11-20T19:18:01
+C Omit\sthe\smaximum\sloop\scount\son\sthe\srandom\sname\schooser\sin\sthe\sVACUUM\scommand.\nAdd\sa\scomment\sto\sexplain\swhy\sthis\sis\ssafe\sand\sdoes\snot\sresult\sin\san\ninfinite\sloop.\s\sTicket\s#1009.\s(CVS\s2122)
+D 2004-11-20T19:18:56
 F Makefile.in e747bb5ba34ccbdd81f79dcf1b2b33c02817c21d
 F Makefile.linux-gcc a9e5a0d309fa7c38e7c14d3ecf7690879d3a5457
 F README a01693e454a00cc117967e3f9fdab2d4d52e9bc1
@@ -74,7 +74,7 @@ F src/trigger.c 0c91b56182560263733e4b035acdb939bd1cf0e2
 F src/update.c 395a2b270dfcbc96c20e40c9cb42b0533768ce30
 F src/utf.c e45ce11be6922408cd381561721f6cca7d3b992a
 F src/util.c 4a8db4e97a3cfda12ad8dda3e77dd2d00ad1de5e
-F src/vacuum.c ecb4a2c6f1ac5cc9b394dc64d3bb14ca650c4f60
+F src/vacuum.c d061dd908a9e809c54e40e24a551b1d64abd3d16
 F src/vdbe.c ba3a920731d43bcf2497d558238400369008531a
 F src/vdbe.h 067ca8d6750ba4f69a50284765e5883dee860181
 F src/vdbeInt.h 6017100adff362b8dfa37a69e3f1431f084bfa5b
@@ -260,7 +260,7 @@ F www/tclsqlite.tcl 560ecd6a916b320e59f2917317398f3d59b7cc25
 F www/vdbe.tcl 095f106d93875c94b47367384ebc870517431618
 F www/version3.tcl 092a01f5ef430d2c4acc0ae558d74c4bb89638a0
 F www/whentouse.tcl fdacb0ba2d39831e8a6240d05a490026ad4c4e4c
-P 368774487e7a0266465f5a1c2701c9b14573d26c
-R 2d696b4b112d3e16cd5eeec0f1da51b4
+P 519bc9d9975bbdb4ba056799534d5c465e0cd042
+R 91deb97845899511a506d4ec5150a23d
 U drh
-Z f7c4d9f04ce181b804404f872e7ac015
+Z a06d6e8301753205b533356bff385276
index 83ca8f18d14fb1c34583036199d6ef6a8c9bdd50..dfffb5bb67cde25a8c9b2fd6f1ccebbd320e1201 100644 (file)
@@ -1 +1 @@
-519bc9d9975bbdb4ba056799534d5c465e0cd042
\ No newline at end of file
+1241086f23a2ef7aef85139817f0c1b90140481d
\ No newline at end of file
index 99e30bd47aae142c87786a44ae20cd62180492a6..b92b33d8f665960bdc5619aa8779d74a31239ddc 100644 (file)
@@ -14,7 +14,7 @@
 ** Most of the code in this file may be omitted by defining the
 ** SQLITE_OMIT_VACUUM macro.
 **
-** $Id: vacuum.c,v 1.33 2004/10/30 20:23:09 drh Exp $
+** $Id: vacuum.c,v 1.34 2004/11/20 19:18:56 drh Exp $
 */
 #include "sqliteInt.h"
 #include "os.h"
@@ -97,7 +97,6 @@ int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db){
   const char *zFilename;  /* full pathname of the database file */
   int nFilename;          /* number of characters  in zFilename[] */
   char *zTemp = 0;        /* a temporary file in same directory as zFilename */
-  int i;                  /* Loop counter */
   Btree *pMain;           /* The database being vacuumed */
   Btree *pTemp;
   char *zSql = 0;
@@ -129,11 +128,19 @@ int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db){
     goto end_of_vacuum;
   }
   strcpy(zTemp, zFilename);
-  i = 0;
+
+  /* The randomName() procedure in the following loop uses an excellent
+  ** source of randomness to generate a name from a space of 1.3e+31 
+  ** possibilities.  So unless the directory already contains on the order
+  ** of 1.3e+31 files, the probability that the following loop will
+  ** run more than once or twice is vanishingly small.  We are certain
+  ** enough that this loop will always terminate (and terminate quickly)
+  ** that we don't even bother to set a maximum loop count.
+  */
   do {
     zTemp[nFilename] = '-';
     randomName((unsigned char*)&zTemp[nFilename+1]);
-  } while( i<10 && sqlite3OsFileExists(zTemp) );
+  } while( sqlite3OsFileExists(zTemp) );
 
   /* Attach the temporary database as 'vacuum_db'. The synchronous pragma
   ** can be set to 'off' for this file, as it is not recovered if a crash