mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-10 01:02:56 +03:00
Additional schema mutex checks for sqlite3RootPageMoved().
Reduce the scope of sqlite3ResetInternalSchema() in a few places. FossilOrigin-Name: 39c00907833413c0d97d3e06fdda967b825d23ea
This commit is contained in:
18
manifest
18
manifest
@@ -1,5 +1,5 @@
|
|||||||
C Minor\scomment\stypo\scorrections.\s\sSimplify\san\sassert.\s\sNo\sfunctional\schanges.
|
C Additional\sschema\smutex\schecks\sfor\ssqlite3RootPageMoved().\nReduce\sthe\sscope\sof\ssqlite3ResetInternalSchema()\sin\sa\sfew\splaces.
|
||||||
D 2011-04-04T20:40:22.086
|
D 2011-04-04T21:25:28.533
|
||||||
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
||||||
F Makefile.in 7a4d9524721d40ef9ee26f93f9bd6a51dba106f2
|
F Makefile.in 7a4d9524721d40ef9ee26f93f9bd6a51dba106f2
|
||||||
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
||||||
@@ -124,7 +124,7 @@ F src/btmutex.c b81062220a4f91b0bd785d13d57205d68449be88
|
|||||||
F src/btree.c 107723ed4f9bdb55213ba6164c30c49af75f4bf9
|
F src/btree.c 107723ed4f9bdb55213ba6164c30c49af75f4bf9
|
||||||
F src/btree.h c0e0ff5c85effe9fc757e3085bbdded6d1cca000
|
F src/btree.h c0e0ff5c85effe9fc757e3085bbdded6d1cca000
|
||||||
F src/btreeInt.h 6714ce2f5e879eb9a904a6a4575dc4faa4f29991
|
F src/btreeInt.h 6714ce2f5e879eb9a904a6a4575dc4faa4f29991
|
||||||
F src/build.c 63465c86f7d5919fddb112ec6d38342863e8e8b3
|
F src/build.c d809f57250b10e83586bc23921de02055890b239
|
||||||
F src/callback.c 0425c6320730e6d3981acfb9202c1bed9016ad1a
|
F src/callback.c 0425c6320730e6d3981acfb9202c1bed9016ad1a
|
||||||
F src/complete.c dc1d136c0feee03c2f7550bafc0d29075e36deac
|
F src/complete.c dc1d136c0feee03c2f7550bafc0d29075e36deac
|
||||||
F src/ctime.c 52ff72f966cee3087e0138a3ec69371c22be3c01
|
F src/ctime.c 52ff72f966cee3087e0138a3ec69371c22be3c01
|
||||||
@@ -171,7 +171,7 @@ F src/pcache.c 09d38c44ab275db581f7a2f6ff8b9bc7f8c0faaa
|
|||||||
F src/pcache.h c683390d50f856d4cd8e24342ae62027d1bb6050
|
F src/pcache.h c683390d50f856d4cd8e24342ae62027d1bb6050
|
||||||
F src/pcache1.c d548e31beafa792d1994b663a29a5303569efc4e
|
F src/pcache1.c d548e31beafa792d1994b663a29a5303569efc4e
|
||||||
F src/pragma.c 36eec9129bfea2dbcdc1694d362f17330132697d
|
F src/pragma.c 36eec9129bfea2dbcdc1694d362f17330132697d
|
||||||
F src/prepare.c a4d8ac347b39e317d2f463c36b22c650e00b7126
|
F src/prepare.c 206e1f06479fb5f756592bded468bd3ece3f41d4
|
||||||
F src/printf.c 585a36b6a963df832cfb69505afa3a34ed5ef8a1
|
F src/printf.c 585a36b6a963df832cfb69505afa3a34ed5ef8a1
|
||||||
F src/random.c cd4a67b3953b88019f8cd4ccd81394a8ddfaba50
|
F src/random.c cd4a67b3953b88019f8cd4ccd81394a8ddfaba50
|
||||||
F src/resolve.c 1c0f32b64f8e3f555fe1f732f9d6f501a7f05706
|
F src/resolve.c 1c0f32b64f8e3f555fe1f732f9d6f501a7f05706
|
||||||
@@ -180,7 +180,7 @@ F src/select.c d24406c45dd2442eb2eeaac413439066b149c944
|
|||||||
F src/shell.c 9dc0b4bb59290c0a35256d278cab0f314987ad6a
|
F src/shell.c 9dc0b4bb59290c0a35256d278cab0f314987ad6a
|
||||||
F src/sqlite.h.in e047f69a61d604d4f8be6cf1d1bdfc68be9ba7e5
|
F src/sqlite.h.in e047f69a61d604d4f8be6cf1d1bdfc68be9ba7e5
|
||||||
F src/sqlite3ext.h c90bd5507099f62043832d73f6425d8d5c5da754
|
F src/sqlite3ext.h c90bd5507099f62043832d73f6425d8d5c5da754
|
||||||
F src/sqliteInt.h 4db35e6a25a424d40bf19b0a818f3e9c78e9e7e2
|
F src/sqliteInt.h 7b0150bfdab049b11bb2d055d065051ff734d113
|
||||||
F src/sqliteLimit.h a17dcd3fb775d63b64a43a55c54cb282f9726f44
|
F src/sqliteLimit.h a17dcd3fb775d63b64a43a55c54cb282f9726f44
|
||||||
F src/status.c 7ac64842c86cec2fc1a1d0e5c16d3beb8ad332bf
|
F src/status.c 7ac64842c86cec2fc1a1d0e5c16d3beb8ad332bf
|
||||||
F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e
|
F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e
|
||||||
@@ -235,7 +235,7 @@ F src/update.c 81911be16ece3c3e7716aa18565b4814ec41f8b9
|
|||||||
F src/utf.c d83650c3ea08f7407bd9d0839d9885241c209c60
|
F src/utf.c d83650c3ea08f7407bd9d0839d9885241c209c60
|
||||||
F src/util.c cd997077bad039efc0597eb027c929658f93c018
|
F src/util.c cd997077bad039efc0597eb027c929658f93c018
|
||||||
F src/vacuum.c 3b2b0998f4f277e4bc61469c2d78d8424d02899b
|
F src/vacuum.c 3b2b0998f4f277e4bc61469c2d78d8424d02899b
|
||||||
F src/vdbe.c 1e62a4f18500f86137fda77416c5e55f7336d1d1
|
F src/vdbe.c 0140a57f9cbd50351219bfc4e44ef3de64bd65b8
|
||||||
F src/vdbe.h 4de0efb4b0fdaaa900cf419b35c458933ef1c6d2
|
F src/vdbe.h 4de0efb4b0fdaaa900cf419b35c458933ef1c6d2
|
||||||
F src/vdbeInt.h 7e2f028ecc1a9faa6f253e7aa8d89cae03662bae
|
F src/vdbeInt.h 7e2f028ecc1a9faa6f253e7aa8d89cae03662bae
|
||||||
F src/vdbeapi.c a09ad9164cafc505250d5dd6b69660c960f1308c
|
F src/vdbeapi.c a09ad9164cafc505250d5dd6b69660c960f1308c
|
||||||
@@ -926,7 +926,7 @@ F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
|
|||||||
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
|
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
|
||||||
F tool/split-sqlite3c.tcl d9be87f1c340285a3e081eb19b4a247981ed290c
|
F tool/split-sqlite3c.tcl d9be87f1c340285a3e081eb19b4a247981ed290c
|
||||||
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
|
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
|
||||||
P ae8374af057b6e6546e9265148cfffe32fcb0849
|
P 82c2316240345167a571507d9392dfb6445ef523
|
||||||
R b2220f2e44fb0854f9cc6a8a89a03fab
|
R 7c6dcb957e59966f9f4fd72f4c665ab1
|
||||||
U drh
|
U drh
|
||||||
Z 3ca4bebd3aef258bcff81de8a689c390
|
Z 5433fdc0cc3ff75407dd2b1ee53a6522
|
||||||
|
@@ -1 +1 @@
|
|||||||
82c2316240345167a571507d9392dfb6445ef523
|
39c00907833413c0d97d3e06fdda967b825d23ea
|
@@ -1866,10 +1866,13 @@ static void sqliteViewResetAll(sqlite3 *db, int idx){
|
|||||||
** in order to be certain that we got the right one.
|
** in order to be certain that we got the right one.
|
||||||
*/
|
*/
|
||||||
#ifndef SQLITE_OMIT_AUTOVACUUM
|
#ifndef SQLITE_OMIT_AUTOVACUUM
|
||||||
void sqlite3RootPageMoved(Db *pDb, int iFrom, int iTo){
|
void sqlite3RootPageMoved(sqlite3 *db, int iDb, int iFrom, int iTo){
|
||||||
HashElem *pElem;
|
HashElem *pElem;
|
||||||
Hash *pHash;
|
Hash *pHash;
|
||||||
|
Db *pDb;
|
||||||
|
|
||||||
|
assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
|
||||||
|
pDb = &db->aDb[iDb];
|
||||||
pHash = &pDb->pSchema->tblHash;
|
pHash = &pDb->pSchema->tblHash;
|
||||||
for(pElem=sqliteHashFirst(pHash); pElem; pElem=sqliteHashNext(pElem)){
|
for(pElem=sqliteHashFirst(pHash); pElem; pElem=sqliteHashNext(pElem)){
|
||||||
Table *pTab = sqliteHashData(pElem);
|
Table *pTab = sqliteHashData(pElem);
|
||||||
|
@@ -472,6 +472,7 @@ static void schemaIsValid(Parse *pParse){
|
|||||||
sqlite3BtreeGetMeta(pBt, BTREE_SCHEMA_VERSION, (u32 *)&cookie);
|
sqlite3BtreeGetMeta(pBt, BTREE_SCHEMA_VERSION, (u32 *)&cookie);
|
||||||
assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
|
assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
|
||||||
if( cookie!=db->aDb[iDb].pSchema->schema_cookie ){
|
if( cookie!=db->aDb[iDb].pSchema->schema_cookie ){
|
||||||
|
sqlite3ResetInternalSchema(db, iDb);
|
||||||
pParse->rc = SQLITE_SCHEMA;
|
pParse->rc = SQLITE_SCHEMA;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -613,9 +614,6 @@ static int sqlite3Prepare(
|
|||||||
if( pParse->checkSchema ){
|
if( pParse->checkSchema ){
|
||||||
schemaIsValid(pParse);
|
schemaIsValid(pParse);
|
||||||
}
|
}
|
||||||
if( pParse->rc==SQLITE_SCHEMA ){
|
|
||||||
sqlite3ResetInternalSchema(db, -1);
|
|
||||||
}
|
|
||||||
if( db->mallocFailed ){
|
if( db->mallocFailed ){
|
||||||
pParse->rc = SQLITE_NOMEM;
|
pParse->rc = SQLITE_NOMEM;
|
||||||
}
|
}
|
||||||
|
@@ -2956,7 +2956,7 @@ extern SQLITE_WSD FuncDefHash sqlite3GlobalFunctions;
|
|||||||
extern int sqlite3PendingByte;
|
extern int sqlite3PendingByte;
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
void sqlite3RootPageMoved(Db*, int, int);
|
void sqlite3RootPageMoved(sqlite3*, int, int, int);
|
||||||
void sqlite3Reindex(Parse*, Token*, Token*);
|
void sqlite3Reindex(Parse*, Token*, Token*);
|
||||||
void sqlite3AlterFunctions(void);
|
void sqlite3AlterFunctions(void);
|
||||||
void sqlite3AlterRenameTable(Parse*, SrcList*, Token*);
|
void sqlite3AlterRenameTable(Parse*, SrcList*, Token*);
|
||||||
|
14
src/vdbe.c
14
src/vdbe.c
@@ -551,7 +551,7 @@ int sqlite3VdbeExec(
|
|||||||
Op *pOp; /* Current operation */
|
Op *pOp; /* Current operation */
|
||||||
int rc = SQLITE_OK; /* Value to return */
|
int rc = SQLITE_OK; /* Value to return */
|
||||||
sqlite3 *db = p->db; /* The database */
|
sqlite3 *db = p->db; /* The database */
|
||||||
u8 resetSchemaOnFault = 0; /* Reset schema after an error if true */
|
u8 resetSchemaOnFault = 0; /* Reset schema after an error if positive */
|
||||||
u8 encoding = ENC(db); /* The database encoding */
|
u8 encoding = ENC(db); /* The database encoding */
|
||||||
#ifndef SQLITE_OMIT_PROGRESS_CALLBACK
|
#ifndef SQLITE_OMIT_PROGRESS_CALLBACK
|
||||||
int checkProgress; /* True if progress callbacks are enabled */
|
int checkProgress; /* True if progress callbacks are enabled */
|
||||||
@@ -2953,7 +2953,6 @@ case OP_VerifyCookie: {
|
|||||||
*/
|
*/
|
||||||
if( db->aDb[pOp->p1].pSchema->schema_cookie!=iMeta ){
|
if( db->aDb[pOp->p1].pSchema->schema_cookie!=iMeta ){
|
||||||
sqlite3ResetInternalSchema(db, pOp->p1);
|
sqlite3ResetInternalSchema(db, pOp->p1);
|
||||||
sqlite3VdbeMutexResync(p);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
p->expired = 1;
|
p->expired = 1;
|
||||||
@@ -4534,8 +4533,10 @@ case OP_Destroy: { /* out2-prerelease */
|
|||||||
pOut->u.i = iMoved;
|
pOut->u.i = iMoved;
|
||||||
#ifndef SQLITE_OMIT_AUTOVACUUM
|
#ifndef SQLITE_OMIT_AUTOVACUUM
|
||||||
if( rc==SQLITE_OK && iMoved!=0 ){
|
if( rc==SQLITE_OK && iMoved!=0 ){
|
||||||
sqlite3RootPageMoved(&db->aDb[iDb], iMoved, pOp->p1);
|
sqlite3RootPageMoved(db, iDb, iMoved, pOp->p1);
|
||||||
resetSchemaOnFault = 1;
|
/* All OP_Destroy operations occur on the same btree */
|
||||||
|
assert( resetSchemaOnFault==0 || resetSchemaOnFault==iDb+1 );
|
||||||
|
resetSchemaOnFault = iDb+1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -5969,9 +5970,8 @@ vdbe_error_halt:
|
|||||||
sqlite3VdbeHalt(p);
|
sqlite3VdbeHalt(p);
|
||||||
if( rc==SQLITE_IOERR_NOMEM ) db->mallocFailed = 1;
|
if( rc==SQLITE_IOERR_NOMEM ) db->mallocFailed = 1;
|
||||||
rc = SQLITE_ERROR;
|
rc = SQLITE_ERROR;
|
||||||
if( resetSchemaOnFault ){
|
if( resetSchemaOnFault>0 ){
|
||||||
sqlite3ResetInternalSchema(db, 0);
|
sqlite3ResetInternalSchema(db, resetSchemaOnFault-1);
|
||||||
sqlite3VdbeMutexResync(p);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This is the only way out of this procedure. We have to
|
/* This is the only way out of this procedure. We have to
|
||||||
|
Reference in New Issue
Block a user