From 29ddd3acdd1e057712b58f612ed141d3578030d5 Mon Sep 17 00:00:00 2001 From: drh Date: Tue, 15 May 2012 12:49:32 +0000 Subject: [PATCH] Add assert()s to verify that Table objects in the schema never use lookaside memory. FossilOrigin-Name: 736d6ea677f58e4aa2914fa79a3156b775c5a3f5 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/build.c | 16 ++++++++++++++++ 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/manifest b/manifest index 813436b83d..68138a320d 100644 --- 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 diff --git a/manifest.uuid b/manifest.uuid index a3cbab7aee..d1f1a9b991 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -0bb1cfc63f982db7b29c8e6be6698a6dad100f70 \ No newline at end of file +736d6ea677f58e4aa2914fa79a3156b775c5a3f5 \ No newline at end of file diff --git a/src/build.c b/src/build.c index 6fc59dade4..e02f0402fc 100644 --- a/src/build.c +++ b/src/build.c @@ -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 ); } /* -- 2.47.2