]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Change the name of the VdbeMemRelease() macro to VdbeMemReleaseExtern() to
authordrh <drh@noemail.net>
Mon, 25 Aug 2014 11:20:27 +0000 (11:20 +0000)
committerdrh <drh@noemail.net>
Mon, 25 Aug 2014 11:20:27 +0000 (11:20 +0000)
more accurately reflect what it does.  Performance enhancement to the
sqlite3VdbeMemRelease() function.

FossilOrigin-Name: 3ca5846da7da5e08192a4c96288197be3b7ab6f7

manifest
manifest.uuid
src/vdbe.c
src/vdbeInt.h
src/vdbemem.c

index bb740b999ab7f05e31913b5b26bc0a830f37d2f4..bfef72eb6a1393b064c25c59fa6879f994669dd8 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C The\ssqlite3VdbeChangeEncoding()\sroutine\sgoes\sabout\s3x\sfaster\sif\sthe\nsqlite3VdbeMemTranslate()\ssubroutine\sis\snot\sinlined.
-D 2014-08-24T02:53:23.646
+C Change\sthe\sname\sof\sthe\sVdbeMemRelease()\smacro\sto\sVdbeMemReleaseExtern()\sto\nmore\saccurately\sreflect\swhat\sit\sdoes.\s\sPerformance\senhancement\sto\sthe\nsqlite3VdbeMemRelease()\sfunction.
+D 2014-08-25T11:20:27.189
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in 5eb79e334a5de69c87740edd56af6527dd219308
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -284,13 +284,13 @@ F src/update.c ea336ce7b8b3fc5e316ba8f082e6445babf81059
 F src/utf.c 77abb5e6d27f3d236e50f7c8fff1d00e15262359
 F src/util.c 068dcd26354a3898ccc64ad5c4bdb95a7a15d33a
 F src/vacuum.c 3728d74919d4fb1356f9e9a13e27773db60b7179
-F src/vdbe.c 52ee5d589cbb171a8b096f210b69deb4a33c4369
+F src/vdbe.c 0fe4b47668b36a50bd9f7fd7b15cbeeb69d54b37
 F src/vdbe.h c63fad052c9e7388d551e556e119c0bcf6bebdf8
-F src/vdbeInt.h 764a055bc9a3e61a30ba37cd4c1826f62bcf8759
+F src/vdbeInt.h 20056cd59ff93ef9eb91009ece726d65dd7ed322
 F src/vdbeapi.c cda974083d7597f807640d344ffcf76d872201ce
 F src/vdbeaux.c dba006f67c9fd1b1d07ee7fb0fb38aa1905161d1
 F src/vdbeblob.c 848238dc73e93e48432991bb5651bf87d865eca4
-F src/vdbemem.c f2e162888521a9af35d608ac4c13db4991dfb417
+F src/vdbemem.c 4c9d686da474957d2e78834f13cc5f141fe6b87f
 F src/vdbesort.c f7f5563bf7d4695ca8f3203f3bf9de96d04ed0b3
 F src/vdbetrace.c 6f52bc0c51e144b7efdcfb2a8f771167a8816767
 F src/vtab.c 019dbfd0406a7447c990e1f7bd1dfcdb8895697f
@@ -1188,7 +1188,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 c63311e2f3344363a5ed99838fb5850004eaee30
-R 195c0a9c31ce9f43b0d460b5ca896167
+P 0c7e1b875a14ff9d71af7bb125a0272a23d57353
+R 3449942ddb4a22bfe8e7f1684bd27e8b
 U drh
-Z 7685d4da1bf506f63008f6a3d5e2d0bd
+Z c7041d8c52f909d88b499b4a5f3227aa
index de00fe8ceecc215277463a067bd874f36ff0f06b..725161693a49fab338741d3335bcfbbfd2eb5af6 100644 (file)
@@ -1 +1 @@
-0c7e1b875a14ff9d71af7bb125a0272a23d57353
\ No newline at end of file
+3ca5846da7da5e08192a4c96288197be3b7ab6f7
\ No newline at end of file
index 2e797eeaf5c9f0aacbc3592c0778c8bdf23df4af..72a1552ce142948db898dd85a5b360c7bb0654a7 100644 (file)
@@ -640,7 +640,7 @@ int sqlite3VdbeExec(
       assert( pOp->p2<=(p->nMem-p->nCursor) );
       pOut = &aMem[pOp->p2];
       memAboutToChange(p, pOut);
-      VdbeMemRelease(pOut);
+      VdbeMemReleaseExtern(pOut);
       pOut->flags = MEM_Int;
     }
 
@@ -1079,7 +1079,7 @@ case OP_Null: {           /* out2-prerelease */
   while( cnt>0 ){
     pOut++;
     memAboutToChange(p, pOut);
-    VdbeMemRelease(pOut);
+    VdbeMemReleaseExtern(pOut);
     pOut->flags = nullFlag;
     cnt--;
   }
@@ -1165,7 +1165,7 @@ case OP_Move: {
     assert( pIn1<=&aMem[(p->nMem-p->nCursor)] );
     assert( memIsValid(pIn1) );
     memAboutToChange(p, pOut);
-    VdbeMemRelease(pOut);
+    VdbeMemReleaseExtern(pOut);
     zMalloc = pOut->zMalloc;
     memcpy(pOut, pIn1, sizeof(Mem));
 #ifdef SQLITE_DEBUG
@@ -2538,7 +2538,7 @@ case OP_Column: {
   if( pC->szRow>=aOffset[p2+1] ){
     /* This is the common case where the desired content fits on the original
     ** page - where the content is not on an overflow page */
-    VdbeMemRelease(pDest);
+    VdbeMemReleaseExtern(pDest);
     sqlite3VdbeSerialGet(pC->aRow+aOffset[p2], aType[p2], pDest);
   }else{
     /* This branch happens only when content is on overflow pages */
index ba44b61e91663055627a6197fd70ba28a13f57d8..384c5eb37b00381a23c5e372984ae3996a57783b 100644 (file)
@@ -430,7 +430,7 @@ void sqlite3VdbeMemRelease(Mem *p);
 void sqlite3VdbeMemReleaseExternal(Mem *p);
 #define VdbeMemDynamic(X)  \
   (((X)->flags&(MEM_Agg|MEM_Dyn|MEM_RowSet|MEM_Frame))!=0)
-#define VdbeMemRelease(X)  \
+#define VdbeMemReleaseExtern(X)  \
   if( VdbeMemDynamic(X) ) sqlite3VdbeMemReleaseExternal(X);
 int sqlite3VdbeMemFinalize(Mem*, FuncDef*);
 const char *sqlite3OpcodeName(int);
index 572d486fc4313df4b873b7f23818fbebd4979e00..55e212d8caaa9de00c2eec4391e9db0610afb646 100644 (file)
@@ -121,7 +121,7 @@ int sqlite3VdbeMemGrow(Mem *pMem, int n, int bPreserve){
       pMem->zMalloc = sqlite3DbMallocRaw(pMem->db, n);
     }
     if( pMem->zMalloc==0 ){
-      VdbeMemRelease(pMem);
+      VdbeMemReleaseExtern(pMem);
       pMem->z = 0;
       pMem->flags = MEM_Null;  
       return SQLITE_NOMEM;
@@ -300,6 +300,9 @@ int sqlite3VdbeMemFinalize(Mem *pMem, FuncDef *pFunc){
 ** If the memory cell contains a string value that must be freed by
 ** invoking an external callback, free it now. Calling this function
 ** does not free any Mem.zMalloc buffer.
+**
+** The VdbeMemReleaseExtern() macro invokes this routine if only if there
+** is work for this routine to do.
 */
 void sqlite3VdbeMemReleaseExternal(Mem *p){
   assert( p->db==0 || sqlite3_mutex_held(p->db->mutex) );
@@ -319,6 +322,25 @@ void sqlite3VdbeMemReleaseExternal(Mem *p){
   }
 }
 
+/*
+** Release memory held by the Mem p, both external memory cleared
+** by p->xDel and memory in p->zMalloc.
+**
+** This is a helper routine invoked by sqlite3VdbeMemRelease() in
+** the uncommon case when there really is memory in p that is
+** need of freeing.
+*/
+static SQLITE_NOINLINE void vdbeMemRelease(Mem *p){
+  if( VdbeMemDynamic(p) ){
+    sqlite3VdbeMemReleaseExternal(p);
+  }
+  if( p->zMalloc ){
+    sqlite3DbFree(p->db, p->zMalloc);
+    p->zMalloc = 0;
+  }
+  p->z = 0;
+}
+
 /*
 ** Release any memory held by the Mem. This may leave the Mem in an
 ** inconsistent state, for example with (Mem.z==0) and
@@ -326,13 +348,12 @@ void sqlite3VdbeMemReleaseExternal(Mem *p){
 */
 void sqlite3VdbeMemRelease(Mem *p){
   assert( sqlite3VdbeCheckMemInvariants(p) );
-  VdbeMemRelease(p);
-  if( p->zMalloc ){
-    sqlite3DbFree(p->db, p->zMalloc);
-    p->zMalloc = 0;
+  if( VdbeMemDynamic(p) || p->zMalloc ){
+    vdbeMemRelease(p);
+  }else{
+    p->z = 0;
   }
-  p->z = 0;
-  assert( p->xDel==0 );  /* Zeroed by VdbeMemRelease() above */
+  assert( p->xDel==0 );
 }
 
 /*
@@ -638,7 +659,7 @@ void sqlite3VdbeMemAboutToChange(Vdbe *pVdbe, Mem *pMem){
 */
 void sqlite3VdbeMemShallowCopy(Mem *pTo, const Mem *pFrom, int srcType){
   assert( (pFrom->flags & MEM_RowSet)==0 );
-  VdbeMemRelease(pTo);
+  VdbeMemReleaseExtern(pTo);
   memcpy(pTo, pFrom, MEMCELLSIZE);
   pTo->xDel = 0;
   if( (pFrom->flags&MEM_Static)==0 ){
@@ -656,7 +677,7 @@ int sqlite3VdbeMemCopy(Mem *pTo, const Mem *pFrom){
   int rc = SQLITE_OK;
 
   assert( (pFrom->flags & MEM_RowSet)==0 );
-  VdbeMemRelease(pTo);
+  VdbeMemReleaseExtern(pTo);
   memcpy(pTo, pFrom, MEMCELLSIZE);
   pTo->flags &= ~MEM_Dyn;
   pTo->xDel = 0;