1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-10 01:02:56 +03:00

Make sure all virtual table cursors have been closed on a prepared statement

prior to unlinking the perpared statement from its database connection.

FossilOrigin-Name: f7c5abe8739090db0738d2c7002a0d71f76c927e
This commit is contained in:
drh
2012-10-26 00:11:23 +00:00
parent e62c0694de
commit cb103b9274
5 changed files with 22 additions and 17 deletions

View File

@@ -1,5 +1,5 @@
C Fix\sa\sbug\sin\sfts3\scausing\sit\sto\sreturn\sSQLITE_NOMEM\swhen\sNEAR,\sOR\sand\ssome\sauxiliary\sfunctions\swere\sused\stogether.\sAlso\sa\ssegfault\sin\svtab.c\sthat\scould\sfollow\san\sOOM\scondition. C Make\ssure\sall\svirtual\stable\scursors\shave\sbeen\sclosed\son\sa\sprepared\sstatement\nprior\sto\sunlinking\sthe\sperpared\sstatement\sfrom\sits\sdatabase\sconnection.
D 2012-10-25T19:25:39.022 D 2012-10-26T00:11:23.970
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in 5f4f26109f9d80829122e0e09f9cda008fa065fb F Makefile.in 5f4f26109f9d80829122e0e09f9cda008fa065fb
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -181,7 +181,7 @@ F src/sqlite3.rc fea433eb0a59f4c9393c8e6d76a6e2596b1fe0c0
F src/sqlite3ext.h 6904f4aadf976f95241311fbffb00823075d9477 F src/sqlite3ext.h 6904f4aadf976f95241311fbffb00823075d9477
F src/sqliteInt.h b49674b1c92173e9796c94fd6f15c1679e3b10cc F src/sqliteInt.h b49674b1c92173e9796c94fd6f15c1679e3b10cc
F src/sqliteLimit.h 164b0e6749d31e0daa1a4589a169d31c0dec7b3d F src/sqliteLimit.h 164b0e6749d31e0daa1a4589a169d31c0dec7b3d
F src/status.c 35939e7e03abf1b7577ce311f48f682c40de3208 F src/status.c 53463144deb5dfac0a66b3be4dd7844b8f8a4c98
F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e
F src/tclsqlite.c 515abd8e33e82aa330eeb54675185a7e1e5b6778 F src/tclsqlite.c 515abd8e33e82aa330eeb54675185a7e1e5b6778
F src/test1.c 936afc02766403e5debca49a1817a780e116df7e F src/test1.c 936afc02766403e5debca49a1817a780e116df7e
@@ -237,10 +237,10 @@ F src/utf.c 8d819e2e5104a430fc2005f018db14347c95a38f
F src/util.c 0af2e515dc0dabacec931bca39525f6c3f1c5455 F src/util.c 0af2e515dc0dabacec931bca39525f6c3f1c5455
F src/vacuum.c 2727bdd08847fcb6b2d2da6d14f018910e8645d3 F src/vacuum.c 2727bdd08847fcb6b2d2da6d14f018910e8645d3
F src/vdbe.c 31523df2b986fc6c959dd54ca640ba865884641b F src/vdbe.c 31523df2b986fc6c959dd54ca640ba865884641b
F src/vdbe.h 18f581cac1f4339ec3299f3e0cc6e11aec654cdb F src/vdbe.h b52887278cb173e66188da84dfab216bea61119d
F src/vdbeInt.h 573a43ab5697b648a1e8f3dfc7d8667d5ca55729 F src/vdbeInt.h 573a43ab5697b648a1e8f3dfc7d8667d5ca55729
F src/vdbeapi.c 4c2418161cf45392ba76a7ca92f9a5f06b96f89c F src/vdbeapi.c 4c2418161cf45392ba76a7ca92f9a5f06b96f89c
F src/vdbeaux.c 674e969e026d1af1938942eba17071127839fc15 F src/vdbeaux.c 8c8cfd30063e9b3664e2faa0e3785102bf131a10
F src/vdbeblob.c 32f2a4899d67f69634ea4dd93e3f651936d732cb F src/vdbeblob.c 32f2a4899d67f69634ea4dd93e3f651936d732cb
F src/vdbemem.c cb55e84b8e2c15704968ee05f0fae25883299b74 F src/vdbemem.c cb55e84b8e2c15704968ee05f0fae25883299b74
F src/vdbesort.c 0dc1b274dcb4d4c8e71b0b2b15261f286caba39b F src/vdbesort.c 0dc1b274dcb4d4c8e71b0b2b15261f286caba39b
@@ -1021,7 +1021,10 @@ F tool/vdbe-compress.tcl f12c884766bd14277f4fcedcae07078011717381
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381 F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
F tool/win/sqlite.vsix 67d8a99aceb56384a81b3f30d6c71743146d2cc9 F tool/win/sqlite.vsix 67d8a99aceb56384a81b3f30d6c71743146d2cc9
P a6d906cfeb9b181fd5b88df3650bab7ee1a24c0b P 33f4f9817e8b3cb97ce02a4c49bd586332da37b2
R 674e19925b07366510d1fc7375732e22 R bc72b67b42140060c43fae49b44a7daa
U dan T *branch * deferred-close-order
Z 1032beb5eac48ad97bee39ee66a1a525 T *sym-deferred-close-order *
T -sym-trunk *
U drh
Z 48246a4a15ab765f01b398ae16f882b2

View File

@@ -1 +1 @@
33f4f9817e8b3cb97ce02a4c49bd586332da37b2 f7c5abe8739090db0738d2c7002a0d71f76c927e

View File

@@ -208,7 +208,7 @@ int sqlite3_db_status(
db->pnBytesFreed = &nByte; db->pnBytesFreed = &nByte;
for(pVdbe=db->pVdbe; pVdbe; pVdbe=pVdbe->pNext){ for(pVdbe=db->pVdbe; pVdbe; pVdbe=pVdbe->pNext){
sqlite3VdbeDeleteObject(db, pVdbe); sqlite3VdbeClearObject(db, pVdbe);
} }
db->pnBytesFreed = 0; db->pnBytesFreed = 0;

View File

@@ -188,7 +188,7 @@ VdbeOp *sqlite3VdbeGetOp(Vdbe*, int);
int sqlite3VdbeMakeLabel(Vdbe*); int sqlite3VdbeMakeLabel(Vdbe*);
void sqlite3VdbeRunOnlyOnce(Vdbe*); void sqlite3VdbeRunOnlyOnce(Vdbe*);
void sqlite3VdbeDelete(Vdbe*); void sqlite3VdbeDelete(Vdbe*);
void sqlite3VdbeDeleteObject(sqlite3*,Vdbe*); void sqlite3VdbeClearObject(sqlite3*,Vdbe*);
void sqlite3VdbeMakeReady(Vdbe*,Parse*); void sqlite3VdbeMakeReady(Vdbe*,Parse*);
int sqlite3VdbeFinalize(Vdbe*); int sqlite3VdbeFinalize(Vdbe*);
void sqlite3VdbeResolveLabel(Vdbe*, int); void sqlite3VdbeResolveLabel(Vdbe*, int);

View File

@@ -2434,12 +2434,14 @@ void sqlite3VdbeDeleteAuxData(VdbeFunc *pVdbeFunc, int mask){
} }
/* /*
** Free all memory associated with the Vdbe passed as the second argument. ** Free all memory associated with the Vdbe passed as the second argument,
** except for object itself, which is preserved.
**
** The difference between this function and sqlite3VdbeDelete() is that ** The difference between this function and sqlite3VdbeDelete() is that
** VdbeDelete() also unlinks the Vdbe from the list of VMs associated with ** VdbeDelete() also unlinks the Vdbe from the list of VMs associated with
** the database connection. ** the database connection and frees the object itself.
*/ */
void sqlite3VdbeDeleteObject(sqlite3 *db, Vdbe *p){ void sqlite3VdbeClearObject(sqlite3 *db, Vdbe *p){
SubProgram *pSub, *pNext; SubProgram *pSub, *pNext;
int i; int i;
assert( p->db==0 || p->db==db ); assert( p->db==0 || p->db==db );
@@ -2460,7 +2462,6 @@ void sqlite3VdbeDeleteObject(sqlite3 *db, Vdbe *p){
sqlite3DbFree(db, p->zExplain); sqlite3DbFree(db, p->zExplain);
sqlite3DbFree(db, p->pExplain); sqlite3DbFree(db, p->pExplain);
#endif #endif
sqlite3DbFree(db, p);
} }
/* /*
@@ -2472,6 +2473,7 @@ void sqlite3VdbeDelete(Vdbe *p){
if( NEVER(p==0) ) return; if( NEVER(p==0) ) return;
db = p->db; db = p->db;
assert( sqlite3_mutex_held(db->mutex) ); assert( sqlite3_mutex_held(db->mutex) );
sqlite3VdbeClearObject(db, p);
if( p->pPrev ){ if( p->pPrev ){
p->pPrev->pNext = p->pNext; p->pPrev->pNext = p->pNext;
}else{ }else{
@@ -2483,7 +2485,7 @@ void sqlite3VdbeDelete(Vdbe *p){
} }
p->magic = VDBE_MAGIC_DEAD; p->magic = VDBE_MAGIC_DEAD;
p->db = 0; p->db = 0;
sqlite3VdbeDeleteObject(db, p); sqlite3DbFree(db, p);
} }
/* /*