diff options
author | drh <drh@noemail.net> | 2016-10-01 00:37:50 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2016-10-01 00:37:50 +0000 |
commit | ab3182f7c4ed7b6f8f7cc7394db24d73293ebab5 (patch) | |
tree | e52a6497e0d6d37f1d8591f12bfa2bca179e8131 /src/vdbeaux.c | |
parent | cd9af608e1385772a3a08b86ac3675ff7d9f8270 (diff) | |
download | sqlite-ab3182f7c4ed7b6f8f7cc7394db24d73293ebab5.tar.gz sqlite-ab3182f7c4ed7b6f8f7cc7394db24d73293ebab5.zip |
Avoid unnecessary zeroing of fields in the Vdbe object when it is allocated.
FossilOrigin-Name: 1e21bbe836539e64d24857f4faa3d12cd607dc7e
Diffstat (limited to 'src/vdbeaux.c')
-rw-r--r-- | src/vdbeaux.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/vdbeaux.c b/src/vdbeaux.c index 86f5096a8..26fee2765 100644 --- a/src/vdbeaux.c +++ b/src/vdbeaux.c @@ -21,8 +21,9 @@ Vdbe *sqlite3VdbeCreate(Parse *pParse){ sqlite3 *db = pParse->db; Vdbe *p; - p = sqlite3DbMallocZero(db, sizeof(Vdbe) ); + p = sqlite3DbMallocRaw(db, sizeof(Vdbe) ); if( p==0 ) return 0; + memset(&p->aOp, 0, sizeof(Vdbe)-offsetof(Vdbe,aOp)); p->db = db; if( db->pVdbe ){ db->pVdbe->pPrev = p; @@ -1826,7 +1827,7 @@ void sqlite3VdbeRewind(Vdbe *p){ int i; #endif assert( p!=0 ); - assert( p->magic==VDBE_MAGIC_INIT ); + assert( p->magic==VDBE_MAGIC_INIT || p->magic==VDBE_MAGIC_RESET ); /* There should be at least one opcode. */ @@ -1953,7 +1954,11 @@ void sqlite3VdbeMakeReady( pParse->nzVar = 0; pParse->azVar = 0; p->explain = pParse->explain; - if( db->mallocFailed==0 ){ + if( db->mallocFailed ){ + p->nVar = 0; + p->nCursor = 0; + p->nMem = 0; + }else{ p->nCursor = nCursor; p->nVar = (ynVar)nVar; initMemArray(p->aVar, nVar, db, MEM_Null); @@ -2880,7 +2885,7 @@ int sqlite3VdbeReset(Vdbe *p){ } #endif p->iCurrentTime = 0; - p->magic = VDBE_MAGIC_INIT; + p->magic = VDBE_MAGIC_RESET; return p->rc & db->errMask; } @@ -2951,7 +2956,9 @@ void sqlite3VdbeClearObject(sqlite3 *db, Vdbe *p){ vdbeFreeOpArray(db, pSub->aOp, pSub->nOp); sqlite3DbFree(db, pSub); } - for(i=p->nzVar-1; i>=0; i--) sqlite3DbFree(db, p->azVar[i]); + if( p->magic!=VDBE_MAGIC_INIT ){ + for(i=p->nzVar-1; i>=0; i--) sqlite3DbFree(db, p->azVar[i]); + } sqlite3DbFree(db, p->azVar); vdbeFreeOpArray(db, p->aOp, p->nOp); sqlite3DbFree(db, p->aColName); |