From: drh <> Date: Fri, 1 Apr 2022 18:19:04 +0000 (+0000) Subject: Provide and use a version of sqlite3VdbeFreeCursor() that guarantees the X-Git-Tag: version-3.39.0~265 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=473571b083e6387da0a0268ab396bf1243a15491;p=thirdparty%2Fsqlite.git Provide and use a version of sqlite3VdbeFreeCursor() that guarantees the cursor pointer is not NULL. This saves a few bytes of code space and a few CPU cycles. FossilOrigin-Name: cb5e6f8e265c91221227e5f15b95798c688773262407dd138d414103184702f6 --- diff --git a/manifest b/manifest index e133f7b103..e91b22a10f 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Remove\san\sunnecessary\sbranch\sfrom\ssqlite3VdbeReset(). -D 2022-04-01T17:23:17.177 +C Provide\sand\suse\sa\sversion\sof\ssqlite3VdbeFreeCursor()\sthat\sguarantees\sthe\ncursor\spointer\sis\snot\sNULL.\s\sThis\ssaves\sa\sfew\sbytes\sof\scode\sspace\sand\sa\nfew\sCPU\scycles. +D 2022-04-01T18:19:04.619 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -624,11 +624,11 @@ F src/upsert.c 8789047a8f0a601ea42fa0256d1ba3190c13746b6ba940fe2d25643a7e991937 F src/utf.c ee39565f0843775cc2c81135751ddd93eceb91a673ea2c57f61c76f288b041a0 F src/util.c 602fe229f32a96ceccae4f40824129669582096f7c355f53dbac156c9fecef23 F src/vacuum.c 6c38ddc52f0619865c91dae9c441d4d48bf3040d7dc1bc5b22da1e45547ed0b3 -F src/vdbe.c aa8751fbca2aae36ea0a4753636d4e257363a39c67af6b52ebdaecea83de2859 +F src/vdbe.c 0ea2adc2b42e9e3ec8c30fd46818c9715f6359334618153ed2192b4c19e328f8 F src/vdbe.h a1d0e3b934e835e73edd146f2e7c4eadb711b5c9875c18159a57483fd78e550e -F src/vdbeInt.h a2f535ae607e441104d22617a30cb6290264fa1820702a7956a10c6f795b1344 +F src/vdbeInt.h 81172c6b828b546d9fa1ce3e2cbeba90d56e39a6fbef87c46813611090d41f07 F src/vdbeapi.c 17474f2122c1f54c93dcdb7b845e68e207bbebab6a040c65ed374c4aec049d34 -F src/vdbeaux.c 58e52186c8589c027cbd641a712bff32d065ed9979dceee075f149fbd9741a48 +F src/vdbeaux.c 7a98ce924c634ced8d083d130a06e7f2883743dc53f4636957971d623c5517bf F src/vdbeblob.c 5e61ce31aca17db8fb60395407457a8c1c7fb471dde405e0cd675974611dcfcd F src/vdbemem.c 062cd58c54f887dc2eeb865686251c17237f791f0e6394e9c6f7a6f3c1a7e206 F src/vdbesort.c 43756031ca7430f7aec3ef904824a7883c4ede783e51f280d99b9b65c0796e35 @@ -1945,8 +1945,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 5a50a42fde9477868fad31099f5fe976437825fac44f8b3a4cf6c739c7667bbb -R c8b23c8076d7301b5325ea561823bba4 +P a7d79560a0efd6221ba59ce84bcb4fa94024a901ac4a45e192ddecc6e1b5c78c +R 4a60eaae011c259c4305c79c1c111fac U drh -Z 3fa3c8a11056de64fa803d36c3f3eb49 +Z 4a9d92a66022269a482333bbfdb033cb # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index b9f9ec1753..6bfe5a83a1 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -a7d79560a0efd6221ba59ce84bcb4fa94024a901ac4a45e192ddecc6e1b5c78c \ No newline at end of file +cb5e6f8e265c91221227e5f15b95798c688773262407dd138d414103184702f6 \ No newline at end of file diff --git a/src/vdbe.c b/src/vdbe.c index ed781a96e5..4eee7b03e4 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -271,7 +271,7 @@ static VdbeCursor *allocateCursor( assert( iCur>=0 && iCurnCursor ); if( p->apCsr[iCur] ){ /*OPTIMIZATION-IF-FALSE*/ - sqlite3VdbeFreeCursor(p, p->apCsr[iCur]); + sqlite3VdbeFreeCursorNN(p, p->apCsr[iCur]); p->apCsr[iCur] = 0; } diff --git a/src/vdbeInt.h b/src/vdbeInt.h index 9247b41c3b..342b56ccbc 100644 --- a/src/vdbeInt.h +++ b/src/vdbeInt.h @@ -538,6 +538,7 @@ struct ValueList { */ void sqlite3VdbeError(Vdbe*, const char *, ...); void sqlite3VdbeFreeCursor(Vdbe *, VdbeCursor*); +void sqlite3VdbeFreeCursorNN(Vdbe*,VdbeCursor*); void sqliteVdbePopStack(Vdbe*,int); int SQLITE_NOINLINE sqlite3VdbeHandleMovedCursor(VdbeCursor *p); int SQLITE_NOINLINE sqlite3VdbeFinishMoveto(VdbeCursor*); diff --git a/src/vdbeaux.c b/src/vdbeaux.c index 09c11b73d3..e64bff1c21 100644 --- a/src/vdbeaux.c +++ b/src/vdbeaux.c @@ -2080,7 +2080,7 @@ void sqlite3VdbeFrameDelete(VdbeFrame *p){ VdbeCursor **apCsr = (VdbeCursor **)&aMem[p->nChildMem]; assert( sqlite3VdbeFrameIsValid(p) ); for(i=0; inChildCsr; i++){ - sqlite3VdbeFreeCursor(p->v, apCsr[i]); + if( apCsr[i] ) sqlite3VdbeFreeCursorNN(p->v, apCsr[i]); } releaseMemArray(aMem, p->nChildMem); sqlite3VdbeDeleteAuxData(p->v->db, &p->pAuxData, -1, 0); @@ -2474,9 +2474,9 @@ void sqlite3VdbeMakeReady( ** happens to hold. */ void sqlite3VdbeFreeCursor(Vdbe *p, VdbeCursor *pCx){ - if( pCx==0 ){ - return; - } + if( pCx ) sqlite3VdbeFreeCursorNN(p,pCx); +} +void sqlite3VdbeFreeCursorNN(Vdbe *p, VdbeCursor *pCx){ switch( pCx->eCurType ){ case CURTYPE_SORTER: { sqlite3VdbeSorterClose(p->db, pCx); @@ -2508,7 +2508,7 @@ static void closeCursorsInFrame(Vdbe *p){ for(i=0; inCursor; i++){ VdbeCursor *pC = p->apCsr[i]; if( pC ){ - sqlite3VdbeFreeCursor(p, pC); + sqlite3VdbeFreeCursorNN(p, pC); p->apCsr[i] = 0; } }