aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2010-07-26 13:57:59 +0000
committerdrh <drh@noemail.net>2010-07-26 13:57:59 +0000
commitc176c27cbc66fb49b785608ae286b43cc970c348 (patch)
tree8f0772fd7a7d9a155477268a898ae32fa695cd8c /src
parent7043db9f6fc404f5998b777d86ce8e7bcfb07f6d (diff)
downloadsqlite-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.h1
-rw-r--r--src/vdbeaux.c9
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 );