From 6b478bcd9ec466846dba80446636a2cbd992b221 Mon Sep 17 00:00:00 2001 From: drh Date: Tue, 16 Sep 2014 21:54:11 +0000 Subject: [PATCH] Continuing cleanup of memory register memory allocation handling. FossilOrigin-Name: 2598aedc5dd2bac67e2e518a31f2803e469c2ba6 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/utf.c | 4 ++-- src/vdbemem.c | 17 ++++++++--------- 4 files changed, 18 insertions(+), 19 deletions(-) diff --git a/manifest b/manifest index 20bc2b4129..0c48965589 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Make\ssure\sregisters\sare\scleared\sproperly\sprior\sto\sbeing\sused\sto\sstore\nthe\sresult\sof\san\sOP_Column\soperator. -D 2014-09-16T20:05:21.909 +C Continuing\scleanup\sof\smemory\sregister\smemory\sallocation\shandling. +D 2014-09-16T21:54:11.409 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in cf57f673d77606ab0f2d9627ca52a9ba1464146a F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -285,7 +285,7 @@ F src/threads.c 22dded4283dc4b25422f6444cdcb8d6b1ea0b5ff F src/tokenize.c 3df63041994f55afeb168b463ec836e8f1c50e7c F src/trigger.c 25571661fdeae8c7f975ff40ffec205520a3f92f F src/update.c 729f6f18fc27740591d085e1172cebe311144bf0 -F src/utf.c 77abb5e6d27f3d236e50f7c8fff1d00e15262359 +F src/utf.c 8f634b93d41c089029dd503161a7d3e685d59a9c F src/util.c 4006c01772bd8d8ac4306d523bbcee41d3e392d8 F src/vacuum.c 59f03f92bcff57faa6a8ca256eb29ccddfb0614a F src/vdbe.c 6a45baf86fcc6c294d57e0aef8c9f2c54f07ff18 @@ -294,7 +294,7 @@ F src/vdbeInt.h dc1743de339f5556cc6687219cf8727ad0d35f72 F src/vdbeapi.c 4d2aa56efa1b4a010012466bf8e97dbf179081a6 F src/vdbeaux.c 211ad29d51e01c44a0db1ab69b74c11c8de1cccf F src/vdbeblob.c 848238dc73e93e48432991bb5651bf87d865eca4 -F src/vdbemem.c 18556fc614426886e380def839bdcf9cadbb752a +F src/vdbemem.c 9615c9aba37ec42bd6ea705d3d72379c77720b00 F src/vdbesort.c 09efa5e5098d1a159cd21f588eb118e4fe87cfde F src/vdbetrace.c 16d39c1ef7d1f4a3a7464bea3b7b4bdd7849c415 F src/vtab.c 019dbfd0406a7447c990e1f7bd1dfcdb8895697f @@ -1198,7 +1198,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P f73678038d8fc399c1ca55230ae45962007c909c -R 39f3c2bf48f680cf4e99aef8c3698c28 +P 78fb8838d80b229418c347c63579989432e1af7d +R 386107f24552e12c4df7dfd8a184a53a U drh -Z e586af33404759487ed3f6653fe697fa +Z 90927a6d3c50834bddf5d6b0b977d8d6 diff --git a/manifest.uuid b/manifest.uuid index 0d00de3592..1ed225fb04 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -78fb8838d80b229418c347c63579989432e1af7d \ No newline at end of file +2598aedc5dd2bac67e2e518a31f2803e469c2ba6 \ No newline at end of file diff --git a/src/utf.c b/src/utf.c index 557f3a95e4..549983f6f1 100644 --- a/src/utf.c +++ b/src/utf.c @@ -314,10 +314,10 @@ SQLITE_NOINLINE int sqlite3VdbeMemTranslate(Mem *pMem, u8 desiredEnc){ *z = 0; assert( (pMem->n+(desiredEnc==SQLITE_UTF8?1:2))<=len ); + c = pMem->flags; sqlite3VdbeMemRelease(pMem); - pMem->flags &= ~(MEM_Static|MEM_Dyn|MEM_Ephem); + pMem->flags = MEM_Str|MEM_Term|(c&MEM_AffMask); pMem->enc = desiredEnc; - pMem->flags |= (MEM_Term); pMem->z = (char*)zOut; pMem->zMalloc = pMem->z; diff --git a/src/vdbemem.c b/src/vdbemem.c index c75046ab87..27a2301a9d 100644 --- a/src/vdbemem.c +++ b/src/vdbemem.c @@ -335,8 +335,11 @@ void sqlite3VdbeMemReleaseExternal(Mem *p){ }else if( p->flags&MEM_RowSet ){ sqlite3RowSetClear(p->u.pRowSet); }else if( p->flags&MEM_Frame ){ - sqlite3VdbeMemSetNull(p); + VdbeFrame *pFrame = p->u.pFrame; + pFrame->pParent = pFrame->v->pDelFrame; + pFrame->v->pDelFrame = pFrame; } + p->flags = MEM_Null; } /* @@ -589,15 +592,11 @@ void sqlite3VdbeMemCast(Mem *pMem, u8 aff, u8 encoding){ ** Delete any previous value and set the value stored in *pMem to NULL. */ void sqlite3VdbeMemSetNull(Mem *pMem){ - if( pMem->flags & MEM_Frame ){ - VdbeFrame *pFrame = pMem->u.pFrame; - pFrame->pParent = pFrame->v->pDelFrame; - pFrame->v->pDelFrame = pFrame; + if( VdbeMemDynamic(pMem) ){ + sqlite3VdbeMemReleaseExternal(pMem); + }else{ + pMem->flags = MEM_Null; } - if( pMem->flags & MEM_RowSet ){ - sqlite3RowSetClear(pMem->u.pRowSet); - } - MemSetTypeFlag(pMem, MEM_Null); } void sqlite3ValueSetNull(sqlite3_value *p){ sqlite3VdbeMemSetNull((Mem*)p);