Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix an issue with P4_MEM and the schema size measurement logic. Also fix a compiler warning. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | experimental |
Files: | files | file ages | folders |
SHA1: |
8166f33885b86029bb8a0fbaf70606a0 |
User & Date: | drh 2010-07-26 13:58:00.000 |
Context
2010-07-26
| ||
14:20 | Further fixes to the P4_MEM size measurement logic. (check-in: 934cda2987 user: drh tags: experimental) | |
13:58 | Fix an issue with P4_MEM and the schema size measurement logic. Also fix a compiler warning. (check-in: 8166f33885 user: drh tags: experimental) | |
12:38 | Make sure sqlite3_free() is not called for P4_MPRINTF during a size measurement. (check-in: 56f11f8823 user: drh tags: experimental) | |
Changes
Changes to src/vdbe.h.
︙ | ︙ | |||
198 199 200 201 202 203 204 | void sqlite3VdbeSetNumCols(Vdbe*,int); int sqlite3VdbeSetColName(Vdbe*, int, int, const char *, void(*)(void*)); void sqlite3VdbeCountChanges(Vdbe*); sqlite3 *sqlite3VdbeDb(Vdbe*); void sqlite3VdbeSetSql(Vdbe*, const char *z, int n, int); void sqlite3VdbeSwap(Vdbe*,Vdbe*); VdbeOp *sqlite3VdbeTakeOpArray(Vdbe*, int*, int*); | < | 198 199 200 201 202 203 204 205 206 207 208 209 210 211 | void sqlite3VdbeSetNumCols(Vdbe*,int); int sqlite3VdbeSetColName(Vdbe*, int, int, const char *, void(*)(void*)); void sqlite3VdbeCountChanges(Vdbe*); sqlite3 *sqlite3VdbeDb(Vdbe*); void sqlite3VdbeSetSql(Vdbe*, const char *z, int n, int); void sqlite3VdbeSwap(Vdbe*,Vdbe*); VdbeOp *sqlite3VdbeTakeOpArray(Vdbe*, int*, int*); sqlite3_value *sqlite3VdbeGetValue(Vdbe*, int, u8); void sqlite3VdbeSetVarmask(Vdbe*, int); #ifndef SQLITE_OMIT_TRACE char *sqlite3VdbeExpandSql(Vdbe*, const char*); #endif UnpackedRecord *sqlite3VdbeRecordUnpack(KeyInfo*,int,const void*,char*,int); |
︙ | ︙ |
Changes to src/vdbeaux.c.
︙ | ︙ | |||
603 604 605 606 607 608 609 | break; } case P4_FUNCDEF: { freeEphemeralFunction(db, (FuncDef*)p4); break; } case P4_MEM: { | > | > > > | 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 | break; } case P4_FUNCDEF: { freeEphemeralFunction(db, (FuncDef*)p4); break; } case P4_MEM: { if( db->pnBytesFreed==0 ){ sqlite3ValueFree((sqlite3_value*)p4); }else{ sqlite3DbFree(db, ((Mem*)p4)->zMalloc); } break; } case P4_VTAB : { if( db->pnBytesFreed==0 ) sqlite3VtabUnlock((VTable *)p4); break; } } |
︙ | ︙ | |||
985 986 987 988 989 990 991 | Mem *pEnd; sqlite3 *db = p->db; u8 malloc_failed = db->mallocFailed; if( db->pnBytesFreed ){ for(pEnd=&p[N]; p<pEnd; p++){ sqlite3DbFree(db, p->zMalloc); } | | > | 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 | Mem *pEnd; sqlite3 *db = p->db; u8 malloc_failed = db->mallocFailed; if( db->pnBytesFreed ){ for(pEnd=&p[N]; p<pEnd; p++){ sqlite3DbFree(db, p->zMalloc); } return; } for(pEnd=&p[N]; p<pEnd; p++){ assert( (&p[1])==pEnd || p[0].db==p[1].db ); /* This block is really an inlined version of sqlite3VdbeMemRelease() ** that takes advantage of the fact that the memory cell value is ** being set to NULL after releasing any dynamic resources. ** |
︙ | ︙ |