]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add assert()s to verify that Table objects in the schema never use
authordrh <drh@noemail.net>
Tue, 15 May 2012 12:49:32 +0000 (12:49 +0000)
committerdrh <drh@noemail.net>
Tue, 15 May 2012 12:49:32 +0000 (12:49 +0000)
lookaside memory.

FossilOrigin-Name: 736d6ea677f58e4aa2914fa79a3156b775c5a3f5

manifest
manifest.uuid
src/build.c

index 813436b83df84c8c7ba97c5de3ea5510193340b5..68138a320dc6b2c246aaf4c74735ffd4134f2707 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\san\sassert()\sthat\sverifies\sthat\sthe\sstatement\spointer\sfrom\s\nthe\ssqlite3_prepare()\sfamily\sof\sfunctions\sis\salways\sNULL\sif\sthe\sroutines\nreturn\sother\sthan\sSQLITE_OK.
-D 2012-05-14T12:20:54.347
+C Add\sassert()s\sto\sverify\sthat\sTable\sobjects\sin\sthe\sschema\snever\suse\nlookaside\smemory.
+D 2012-05-15T12:49:32.294
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in 2f37e468503dbe79d35c9f6dffcf3fae1ae9ec20
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -121,7 +121,7 @@ F src/btmutex.c 976f45a12e37293e32cae0281b15a21d48a8aaa7
 F src/btree.c df800f10896bc2ddaa1125c532d6e7a7b9efc532
 F src/btree.h 48a013f8964f12d944d90e4700df47b72dd6d923
 F src/btreeInt.h 38a639c0542c29fe8331a221c4aed0cb8686249e
-F src/build.c 987c6933ea170e443dc6a79d52f8d2506206b12b
+F src/build.c 95fd8aa1bf81acf15e9ef46b07d1f70111ea88d0
 F src/callback.c 0cb4228cdcd827dcc5def98fb099edcc9142dbcd
 F src/complete.c dc1d136c0feee03c2f7550bafc0d29075e36deac
 F src/ctime.c a9c26822515f81ec21588cbb482ca6724be02e33
@@ -997,7 +997,7 @@ F tool/tostr.awk e75472c2f98dd76e06b8c9c1367f4ab07e122d06
 F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
 F tool/warnings-clang.sh a8a0a3babda96dfb1ff51adda3cbbf3dfb7266c2
 F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
-P 8654aa9540fe9fd210899d83d17f3f407096c004
-R 0a00ace346f978ead4e8eda443adff7b
+P 0bb1cfc63f982db7b29c8e6be6698a6dad100f70
+R 040b7c6409bc9c8d46165baae8f02a6f
 U drh
-Z 6b79d382c12877c842863c97c5282a5e
+Z 46fb04131884f3e5ee0e8870b1bd5af5
index a3cbab7aee4e936494f3af2b95448fe82f967c0b..d1f1a9b991f2edb81e95abe9314c392849d00570 100644 (file)
@@ -1 +1 @@
-0bb1cfc63f982db7b29c8e6be6698a6dad100f70
\ No newline at end of file
+736d6ea677f58e4aa2914fa79a3156b775c5a3f5
\ No newline at end of file
index 6fc59dade4067795c637c450022861640aea11d1..e02f0402fce5e66c5b26ed48c1e241bb1701a9c4 100644 (file)
@@ -502,9 +502,16 @@ static void sqliteDeleteColumnNames(sqlite3 *db, Table *pTable){
 ** the table data structure from the hash table.  But it does destroy
 ** memory structures of the indices and foreign keys associated with 
 ** the table.
+**
+** The db parameter is optional.  It is needed if the Table object 
+** contains lookaside memory.  (Table objects in the schema do not use
+** lookaside memory, but some ephemeral Table objects do.)  Or the
+** db parameter can be used with db->pnBytesFreed to measure the memory
+** used by the Table object.
 */
 void sqlite3DeleteTable(sqlite3 *db, Table *pTable){
   Index *pIndex, *pNext;
+  TESTONLY( int nLookaside; ) /* Used to verify lookaside not used for schema */
 
   assert( !pTable || pTable->nRef>0 );
 
@@ -512,6 +519,12 @@ void sqlite3DeleteTable(sqlite3 *db, Table *pTable){
   if( !pTable ) return;
   if( ((!db || db->pnBytesFreed==0) && (--pTable->nRef)>0) ) return;
 
+  /* Record the number of outstanding lookaside allocations in schema Tables
+  ** prior to doing any free() operations.  Since schema Tables do not use
+  ** lookaside, this number should not change. */
+  TESTONLY( nLookaside = (db && (pTable->tabFlags & TF_Ephemeral)==0) ?
+                         db->lookaside.nOut : 0 );
+
   /* Delete all indices associated with this table. */
   for(pIndex = pTable->pIndex; pIndex; pIndex=pNext){
     pNext = pIndex->pNext;
@@ -543,6 +556,9 @@ void sqlite3DeleteTable(sqlite3 *db, Table *pTable){
   sqlite3VtabClear(db, pTable);
 #endif
   sqlite3DbFree(db, pTable);
+
+  /* Verify that no lookaside memory was used by schema tables */
+  assert( nLookaside==0 || nLookaside==db->lookaside.nOut );
 }
 
 /*