]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Remove another branch from the DbMalloc() paths.
authordan <dan@noemail.net>
Wed, 18 Jul 2012 16:07:24 +0000 (16:07 +0000)
committerdan <dan@noemail.net>
Wed, 18 Jul 2012 16:07:24 +0000 (16:07 +0000)
FossilOrigin-Name: defd828e90a5494e58cc2cd14c8f4cce7fd2bb2b

manifest
manifest.uuid
src/analyze.c
src/build.c
src/fkey.c
src/main.c
src/malloc.c
src/parse.y
src/select.c
src/sqliteInt.h
src/tokenize.c

index b5c5fc19686f12f1b8363d99271121d1a3dd786b..64151250abb5953efc8f1b760bc746fdd2d35d61 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Reorganize\scode\sto\sremove\sa\sfew\sof\sthe\sbranches\sintroduced\sinto\sthe\scritical\ssqlite3DbMallocXXX()\spath\sby\sthe\sprevious\scommit.
-D 2012-07-18T11:28:51.265
+C Remove\sanother\sbranch\sfrom\sthe\sDbMalloc()\spaths.
+D 2012-07-18T16:07:24.009
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in 8f6d858bf3df9978ba43df19985146a1173025e4
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -117,7 +117,7 @@ F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b
 F sqlite3.1 6be1ad09113570e1fc8dcaff84c9b0b337db5ffc
 F sqlite3.pc.in ae6f59a76e862f5c561eb32a380228a02afc3cad
 F src/alter.c 149cc80d9257971b0bff34e58fb2263e01998289
-F src/analyze.c 70c46504c0d2543ea5cdca01140b2cd3e1d886e7
+F src/analyze.c 1f05d25f1fb11ba60f95b793e0922757f35355fd
 F src/attach.c 577bf5675b0c50495fc28549f2fcbdb1bac71143
 F src/auth.c 523da7fb4979469955d822ff9298352d6b31de34
 F src/backup.c 5524df36810668b3b5a6de2d7e3910b98e721e33
@@ -126,7 +126,7 @@ F src/btmutex.c 976f45a12e37293e32cae0281b15a21d48a8aaa7
 F src/btree.c f0b71054103cb77eb5e782088c16998ec4f06624
 F src/btree.h 48a013f8964f12d944d90e4700df47b72dd6d923
 F src/btreeInt.h 38a639c0542c29fe8331a221c4aed0cb8686249e
-F src/build.c 47c4506afe4bcb4ed1f4b5357582d1cb3402f8ad
+F src/build.c 4357149e38f95d8034f58ee2c7013423321fa877
 F src/callback.c 0cb4228cdcd827dcc5def98fb099edcc9142dbcd
 F src/complete.c dc1d136c0feee03c2f7550bafc0d29075e36deac
 F src/ctime.c 500d019da966631ad957c37705642be87524463b
@@ -134,7 +134,7 @@ F src/date.c 067a81c9942c497aafd2c260e13add8a7d0c7dd4
 F src/delete.c 4c20ea4f6213b3bc1c6a510586864b679946e05e
 F src/expr.c 06a7733d19dc725dc46ba51afd9feadb4b85d991
 F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb
-F src/fkey.c 657212460bf5cfd3ae607d12ea62092844c227b5
+F src/fkey.c 7d1ec22d7278486c7fe42da43cabfc2a5ed33647
 F src/func.c 18dfedfb857e100b05755a1b12e88b389f957879
 F src/global.c 4cfdca5cb0edd33c4d021baec4ede958cb2c793b
 F src/hash.c 458488dcc159c301b8e7686280ab209f1fb915af
@@ -145,8 +145,8 @@ F src/journal.c 552839e54d1bf76fb8f7abe51868b66acacf6a0e
 F src/legacy.c a199d7683d60cef73089e892409113e69c23a99f
 F src/lempar.c 0ee69fca0be54cd93939df98d2aca4ca46f44416
 F src/loadext.c f20382fbaeec832438a1ba7797bee3d3c8a6d51d
-F src/main.c 0ce67958cf9cd68330c9c77d78dae275c867418e
-F src/malloc.c 1deb02c01b234aae858fc370138af9bf94d99112
+F src/main.c 6241183d894ff51a2049bd6bf246aea877d648b5
+F src/malloc.c 9321b18a9224a4e4823129bd3e1e34cb3c18a7cb
 F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
 F src/mem1.c 5ac4fb90adf0aa2beb912abafc67100a6ce126dc
 F src/mem2.c e307323e86b5da1853d7111b68fd6b84ad6f09cf
@@ -166,7 +166,7 @@ F src/os_unix.c d7c96b5d140f550f07345870112fae5d7ef99757
 F src/os_win.c e3d3d3e26b65a35d4293d753137a58510bd3299b
 F src/pager.c e381c118b77dc22021a1a59d3fec24815e91df78
 F src/pager.h 8b8c9bc065a3c66769df8724dfdf492ee1aab3c5
-F src/parse.y f29df90bd3adc64b33114ab1de9fb7768fcf2099
+F src/parse.y 6548920e5a3ee92c6efc7007e30b03105850ca4c
 F src/pcache.c f8043b433a57aba85384a531e3937a804432a346
 F src/pcache.h 1b5dcc3dc8103d03e625b177023ee67764fa6b7c
 F src/pcache1.c 2234d84f9c003d800a57f00f8535c91667fa4f6c
@@ -176,11 +176,11 @@ F src/printf.c 4a9f882f1c1787a8b494a2987765acf9d97ac21f
 F src/random.c cd4a67b3953b88019f8cd4ccd81394a8ddfaba50
 F src/resolve.c b3c70ab28cac60de33684c9aa9e5138dcf71d6dd
 F src/rowset.c f6a49f3e9579428024662f6e2931832511f831a1
-F src/select.c f6c4833c4d8e94714761d99013d74f381e084f1d
+F src/select.c 5c9f09de4ca3e12da17d1c5215b851ce3356891c
 F src/shell.c 076e1c90d594644f36027c8ecff9a392cf2d3a06
 F src/sqlite.h.in c660e2c8c5b5412d1ce51d58807353fa1dfdbee0
 F src/sqlite3ext.h 6904f4aadf976f95241311fbffb00823075d9477
-F src/sqliteInt.h 2bc2ebc2ff1a2b530ee5ed9ffd46c6fce93b244c
+F src/sqliteInt.h 42082771dfad5ccc5b46ad97bddfe2829a61eaef
 F src/sqliteLimit.h 164b0e6749d31e0daa1a4589a169d31c0dec7b3d
 F src/status.c 35939e7e03abf1b7577ce311f48f682c40de3208
 F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e
@@ -231,7 +231,7 @@ F src/test_vfs.c da6d0d982b11756c94c1760196355d33d03ff745
 F src/test_vfstrace.c 6b28adb2a0e8ecd0f2e3581482e1f658b11b4067
 F src/test_wholenumber.c 3d2b9ed1505c40ad5c5ca2ad16ae7a289d6cc251
 F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9
-F src/tokenize.c 1e86210d3976717a19238ea7b047fac481fe8c12
+F src/tokenize.c a054f58de63c2d7f5ba69439ef7fc75e7f22c158
 F src/trigger.c ee7e178fb9188f44b532cebd449a7c1df90fb684
 F src/update.c d3076782c887c10e882996550345da9c4c9f9dea
 F src/utf.c 890c67dcfcc7a74623c95baac7535aadfe265e84
@@ -1005,7 +1005,7 @@ F tool/tostr.awk e75472c2f98dd76e06b8c9c1367f4ab07e122d06
 F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
-P 8752237d123240b330baa461f855dbc01ffcab5b
-R 83cf777410c006c6e09638632424df66
+P 75c095ee463c0c76e9637edccd33e807f837eb4e
+R 4b3f5fc3616c1d2a9a882bbf6ef4a9dd
 U dan
-Z 7172e94ea9d607acb82697b15b0d80b0
+Z d1a34a26ab7e5c2fc76d0e075bca051a
index 3b93314bd08d87d58b1b44c4ad803a188f295906..46f3e9cf5693a694f2d566ac2a3045ed5823bd29 100644 (file)
@@ -1 +1 @@
-75c095ee463c0c76e9637edccd33e807f837eb4e
\ No newline at end of file
+defd828e90a5494e58cc2cd14c8f4cce7fd2bb2b
\ No newline at end of file
index 4dfc331bef6f821e7973a55a03c3a7b1afe7a9e3..a961df5a8f7bedfb45896ded30a7b8c5b7d2bd3e 100644 (file)
@@ -932,7 +932,7 @@ static int loadStat3(sqlite3 *db, const char *zDb){
   int eType;                    /* Datatype of a sample */
   IndexSample *pSample;         /* A slot in pIdx->aSample[] */
 
-  assert( db->lookaside.bEnabled==0 );
+  assert( db->lookaside.sz==0 );
   if( !sqlite3FindTable(db, "sqlite_stat3", zDb) ){
     return SQLITE_OK;
   }
@@ -1108,10 +1108,10 @@ int sqlite3AnalysisLoad(sqlite3 *db, int iDb){
   /* Load the statistics from the sqlite_stat3 table. */
 #ifdef SQLITE_ENABLE_STAT3
   if( rc==SQLITE_OK ){
-    int lookasideEnabled = db->lookaside.bEnabled;
-    db->lookaside.bEnabled = 0;
+    int lookasideSz = db->lookaside.sz;
+    db->lookaside.sz = 0;
     rc = loadStat3(db, sInfo.zDatabase);
-    db->lookaside.bEnabled = lookasideEnabled;
+    db->lookaside.sz = lookasideSz;
   }
 #endif
 
index 9f13b7b11c7835b4871908bf4bb15fc68a674923..ca755ca57bdd80b3d7ad868fbf6e360d4d686640 100644 (file)
@@ -1816,11 +1816,11 @@ int sqlite3ViewGetColumnNames(Parse *pParse, Table *pTable){
   assert( pTable->pSelect );
   pSel = sqlite3SelectDup(db, pTable->pSelect, 0);
   if( pSel ){
-    u8 enableLookaside = db->lookaside.bEnabled;
+    u16 lookasideSz = db->lookaside.sz;
     n = pParse->nTab;
     sqlite3SrcListAssignCursors(pParse, pSel->pSrc);
     pTable->nCol = -1;
-    db->lookaside.bEnabled = 0;
+    db->lookaside.sz = 0;
 #ifndef SQLITE_OMIT_AUTHORIZATION
     xAuth = db->xAuth;
     db->xAuth = 0;
@@ -1829,7 +1829,7 @@ int sqlite3ViewGetColumnNames(Parse *pParse, Table *pTable){
 #else
     pSelTab = sqlite3ResultSetOfSelect(pParse, pSel);
 #endif
-    db->lookaside.bEnabled = enableLookaside;
+    db->lookaside.sz = lookasideSz;
     pParse->nTab = n;
     if( pSelTab ){
       assert( pTable->aCol==0 );
index 82e4cdc47139836195ce29962d0437ee2f8fb2fb..cd3f749848fc5cbe01c763c0937cd5196df16740 100644 (file)
@@ -981,7 +981,7 @@ static Trigger *fkActionTrigger(
   pTrigger = pFKey->apTrigger[iAction];
 
   if( action!=OE_None && !pTrigger ){
-    u8 enableLookaside;           /* Copy of db->lookaside.bEnabled */
+    u16 lookasideSz;              /* Copy of db->lookaside.sz */
     char const *zFrom;            /* Name of child table */
     int nFrom;                    /* Length in bytes of zFrom */
     Index *pIdx = 0;              /* Parent key index for this FK */
@@ -1090,8 +1090,8 @@ static Trigger *fkActionTrigger(
     }
 
     /* Disable lookaside memory allocation */
-    enableLookaside = db->lookaside.bEnabled;
-    db->lookaside.bEnabled = 0;
+    lookasideSz = db->lookaside.sz;
+    db->lookaside.sz = 0;
 
     pTrigger = (Trigger *)sqlite3DbMallocZero(db, 
         sizeof(Trigger) +         /* struct Trigger */
@@ -1114,7 +1114,7 @@ static Trigger *fkActionTrigger(
     }
 
     /* Re-enable the lookaside buffer, if it was disabled earlier. */
-    db->lookaside.bEnabled = enableLookaside;
+    db->lookaside.sz = lookasideSz;
 
     sqlite3ExprDelete(db, pWhere);
     sqlite3ExprDelete(db, pWhen);
index 4914b8aa1dd6eb10eddfa0f8eee42174d94f8169..a6d67d672faf42fa4392f85c59d7e6d932a14f05 100644 (file)
@@ -552,7 +552,7 @@ static int setupLookaside(sqlite3 *db, void *pBuf, int sz, int cnt){
   }
   db->lookaside.pStart = pStart;
   db->lookaside.pFree = 0;
-  db->lookaside.sz = (u16)sz;
+  db->lookaside.szEnabled = db->lookaside.sz = (u16)sz;
   if( pStart ){
     int i;
     LookasideSlot *p;
@@ -564,12 +564,12 @@ static int setupLookaside(sqlite3 *db, void *pBuf, int sz, int cnt){
       p = (LookasideSlot*)&((u8*)p)[sz];
     }
     db->lookaside.pEnd = p;
-    db->lookaside.bEnabled = 1;
     db->lookaside.bMalloced = pBuf==0 ?1:0;
+    assert( db->lookaside.sz>0 );
   }else{
     db->lookaside.pEnd = 0;
-    db->lookaside.bEnabled = 0;
     db->lookaside.bMalloced = 0;
+    db->lookaside.sz = 0;
   }
   return SQLITE_OK;
 }
index 3894066cc543cbe23cc32c87e42ab2c8d64d16d7..ee2d67ffd1f577deec6341151f7ae6615cff06ff 100644 (file)
@@ -605,23 +605,24 @@ void *sqlite3_realloc(void *pOld, int n){
 */
 #ifndef SQLITE_OMIT_LOOKASIDE
 static void *lookasideAlloc(sqlite3 *db, int n){
-  if( db->lookaside.bEnabled ){
-    if( n>db->lookaside.sz ){
-      db->lookaside.anStat[1]++;
+  assert( db->lookaside.sz==0 || db->lookaside.sz==db->lookaside.szEnabled );
+  if( n>db->lookaside.sz ){
+    /* If db->lookaside.sz is 0, then the lookaside buffer is currently
+    ** disabled. In this case do not increment the "size misses" stat.  */
+    if( db->lookaside.sz ) db->lookaside.anStat[1]++;
+  }else{
+    LookasideSlot *pBuf;
+    if( (pBuf = db->lookaside.pFree)==0 ){
+      db->lookaside.anStat[2]++;
     }else{
-      LookasideSlot *pBuf;
-      if( (pBuf = db->lookaside.pFree)==0 ){
-        db->lookaside.anStat[2]++;
-      }else{
-        db->lookaside.pFree = pBuf->pNext;
-        db->lookaside.nOut++;
-        db->lookaside.anStat[0]++;
-        if( db->lookaside.nOut>db->lookaside.mxOut ){
-          db->lookaside.mxOut = db->lookaside.nOut;
-        }
+      db->lookaside.pFree = pBuf->pNext;
+      db->lookaside.nOut++;
+      db->lookaside.anStat[0]++;
+      if( db->lookaside.nOut>db->lookaside.mxOut ){
+        db->lookaside.mxOut = db->lookaside.nOut;
       }
-      return (void*)pBuf;
     }
+    return (void*)pBuf;
   }
   return 0;
 }
@@ -663,7 +664,7 @@ void *sqlite3DbMallocZero(sqlite3 *db, int n){
   }
 
   sqlite3MemdebugSetType(p, MEMTYPE_DB |
-         ((db && db->lookaside.bEnabled) ? MEMTYPE_LOOKASIDE : MEMTYPE_HEAP));
+         ((db && db->lookaside.sz) ? MEMTYPE_LOOKASIDE : MEMTYPE_HEAP));
   return p;
 }
 
@@ -690,7 +691,7 @@ void *sqlite3DbMallocRaw(sqlite3 *db, int n){
   }
 
   sqlite3MemdebugSetType(p, MEMTYPE_DB |
-         ((db && db->lookaside.bEnabled) ? MEMTYPE_LOOKASIDE : MEMTYPE_HEAP));
+         ((db && db->lookaside.sz) ? MEMTYPE_LOOKASIDE : MEMTYPE_HEAP));
   return p;
 }
 
@@ -707,12 +708,12 @@ void *sqlite3DbRealloc(sqlite3 *db, void *p, int n){
       return sqlite3DbMallocRaw(db, n);
     }
     if( isLookaside(db, p) ){
-      if( n<=db->lookaside.sz ){
+      if( n<=db->lookaside.szEnabled ){
         return p;
       }
       pNew = sqlite3DbMallocRaw(db, n);
       if( pNew ){
-        memcpy(pNew, p, db->lookaside.sz);
+        memcpy(pNew, p, db->lookaside.szEnabled);
         sqlite3DbFree(db, p);
       }
     }else{
@@ -725,7 +726,7 @@ void *sqlite3DbRealloc(sqlite3 *db, void *p, int n){
         db->mallocFailed = 1;
       }
       sqlite3MemdebugSetType(pNew, MEMTYPE_DB | 
-            (db->lookaside.bEnabled ? MEMTYPE_LOOKASIDE : MEMTYPE_HEAP));
+            (db->lookaside.sz ? MEMTYPE_LOOKASIDE : MEMTYPE_HEAP));
     }
   }
   return pNew;
index 94433d53917233d58af31ca8981ab39ab23f0525..0cce68c1b363957284558990ce65f27b97ca6efc 100644 (file)
@@ -152,7 +152,7 @@ create_table ::= createkw temp(T) TABLE ifnotexists(E) nm(Y) dbnm(Z). {
    sqlite3StartTable(pParse,&Y,&Z,T,0,0,E);
 }
 createkw(A) ::= CREATE(X).  {
-  pParse->db->lookaside.bEnabled = 0;
+  pParse->db->lookaside.sz = 0;
   A = X;
 }
 %type ifnotexists {int}
@@ -1378,7 +1378,7 @@ cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt column(Y). {
   sqlite3AlterFinishAddColumn(pParse, &Y);
 }
 add_column_fullname ::= fullname(X). {
-  pParse->db->lookaside.bEnabled = 0;
+  pParse->db->lookaside.sz = 0;
   sqlite3AlterBeginAddColumn(pParse, X);
 }
 kwcolumn_opt ::= .
index d79a6112f72c12ef76373e3074f0b75ce9485b73..89e128ab59a2d371dfd1384bbe4307bb70fa64fb 100644 (file)
@@ -1398,9 +1398,9 @@ Table *sqlite3ResultSetOfSelect(Parse *pParse, Select *pSelect){
   if( pTab==0 ){
     return 0;
   }
-  /* The sqlite3ResultSetOfSelect() is only used n contexts where lookaside
-  ** is disabled */
-  assert( db->lookaside.bEnabled==0 );
+  /* The sqlite3ResultSetOfSelect() should only used in contexts where the
+  ** lookaside buffer is disabled. */
+  assert( db->lookaside.sz==0 );
   pTab->nRef = 1;
   pTab->zName = 0;
   pTab->nRowEst = 1000000;
index f7f5fd386e4d2b25d1c2e2a0bf4d0a792b1324e8..1c2c3063a452b26f62c15d60fff6b8d3bb45ab17 100644 (file)
@@ -783,12 +783,14 @@ struct Schema {
 ** with a particular database connection.  Hence, schema information cannot
 ** be stored in lookaside because in shared cache mode the schema information
 ** is shared by multiple database connections.  Therefore, while parsing
-** schema information, the Lookaside.bEnabled flag is cleared so that
-** lookaside allocations are not used to construct the schema objects.
+** schema information, the Lookaside.sz variable is temporarily set to
+** zero so that lookaside allocations are not used to construct the schema 
+** objects. Lookaside.szEnabled always contains the allocation size that
+** Lookaside.sz is set to when the buffer is enabled.
 */
 struct Lookaside {
   u16 sz;                 /* Size of each buffer in bytes */
-  u8 bEnabled;            /* False to disable new lookaside allocations */
+  u16 szEnabled;          /* Value of 'sz' when buffer is enabled. */
   u8 bMalloced;           /* True if pStart obtained from sqlite3_malloc() */
   int nOut;               /* Number of buffers currently checked out */
   int mxOut;              /* Highwater mark for nOut */
index faea5f26c79c5e188fa87f2fdf6ff76a7a6006c5..490ca5d1271f52733fa7fd5a347e30d7caf125ed 100644 (file)
@@ -390,7 +390,7 @@ int sqlite3RunParser(Parse *pParse, const char *zSql, char **pzErrMsg){
   void *pEngine;                  /* The LEMON-generated LALR(1) parser */
   int tokenType;                  /* type of the next token */
   int lastTokenParsed = -1;       /* type of the previous token */
-  u8 enableLookaside;             /* Saved value of db->lookaside.bEnabled */
+  u16 lookasideSz;                /* Saved value of db->lookaside.sz */
   sqlite3 *db = pParse->db;       /* The database connection */
   int mxSqlLen;                   /* Max length of an SQL string */
 
@@ -413,8 +413,10 @@ int sqlite3RunParser(Parse *pParse, const char *zSql, char **pzErrMsg){
   assert( pParse->nVar==0 );
   assert( pParse->nzVar==0 );
   assert( pParse->azVar==0 );
-  enableLookaside = db->lookaside.bEnabled;
-  if( db->lookaside.pStart ) db->lookaside.bEnabled = 1;
+  lookasideSz = db->lookaside.sz;
+  if( db->lookaside.pStart ){
+    db->lookaside.sz = db->lookaside.szEnabled;
+  }
   while( !db->mallocFailed && zSql[i]!=0 ){
     assert( i>=0 );
     pParse->sLastToken.z = &zSql[i];
@@ -468,7 +470,7 @@ abort_parse:
   );
 #endif /* YYDEBUG */
   sqlite3ParserFree(pEngine, sqlite3_free);
-  db->lookaside.bEnabled = enableLookaside;
+  db->lookaside.sz = lookasideSz;
   if( db->mallocFailed ){
     pParse->rc = SQLITE_NOMEM;
   }