diff options
author | drh <drh@noemail.net> | 2010-07-26 13:57:59 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2010-07-26 13:57:59 +0000 |
commit | c176c27cbc66fb49b785608ae286b43cc970c348 (patch) | |
tree | 8f0772fd7a7d9a155477268a898ae32fa695cd8c /src | |
parent | 7043db9f6fc404f5998b777d86ce8e7bcfb07f6d (diff) | |
download | sqlite-c176c27cbc66fb49b785608ae286b43cc970c348.tar.gz sqlite-c176c27cbc66fb49b785608ae286b43cc970c348.zip |
Fix an issue with P4_MEM and the schema size measurement logic. Also fix
a compiler warning.
FossilOrigin-Name: 8166f33885b86029bb8a0fbaf70606a0d2d5ec2e
Diffstat (limited to 'src')
-rw-r--r-- | src/vdbe.h | 1 | ||||
-rw-r--r-- | src/vdbeaux.c | 9 |
2 files changed, 7 insertions, 3 deletions
diff --git a/src/vdbe.h b/src/vdbe.h index b22a85a53..71c871d52 100644 --- a/src/vdbe.h +++ b/src/vdbe.h @@ -202,7 +202,6 @@ sqlite3 *sqlite3VdbeDb(Vdbe*); void sqlite3VdbeSetSql(Vdbe*, const char *z, int n, int); void sqlite3VdbeSwap(Vdbe*,Vdbe*); VdbeOp *sqlite3VdbeTakeOpArray(Vdbe*, int*, int*); -void sqlite3VdbeProgramDelete(sqlite3 *, SubProgram *, int); sqlite3_value *sqlite3VdbeGetValue(Vdbe*, int, u8); void sqlite3VdbeSetVarmask(Vdbe*, int); #ifndef SQLITE_OMIT_TRACE diff --git a/src/vdbeaux.c b/src/vdbeaux.c index 036b462d3..a29307ff8 100644 --- a/src/vdbeaux.c +++ b/src/vdbeaux.c @@ -607,7 +607,11 @@ static void freeP4(sqlite3 *db, int p4type, void *p4){ break; } case P4_MEM: { - sqlite3ValueFree((sqlite3_value*)p4); + if( db->pnBytesFreed==0 ){ + sqlite3ValueFree((sqlite3_value*)p4); + }else{ + sqlite3DbFree(db, ((Mem*)p4)->zMalloc); + } break; } case P4_VTAB : { @@ -989,7 +993,8 @@ static void releaseMemArray(Mem *p, int N){ for(pEnd=&p[N]; p<pEnd; p++){ sqlite3DbFree(db, p->zMalloc); } - }else + return; + } for(pEnd=&p[N]; p<pEnd; p++){ assert( (&p[1])==pEnd || p[0].db==p[1].db ); |