mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-07 02:42:48 +03:00
Create and use a new pager interface sqlite3PagerUnrefNotNull() that works
just like sqlite3PagerUnref() but guarantees that its argument is not a NULL pointer. FossilOrigin-Name: e00f37e2333cac5b53e17cf764ab56c4fcd5f617
This commit is contained in:
16
manifest
16
manifest
@@ -1,5 +1,5 @@
|
|||||||
C Enhance\sthe\spcache1PinPage()\sroutine\sso\sthat\sit\scalled\smuch\sless\soften\sand\nruns\smuch\sfaster\sin\sthe\scases\swhen\sit\sis\sactually\scalled.
|
C Create\sand\suse\sa\snew\spager\sinterface\ssqlite3PagerUnrefNotNull()\sthat\sworks\njust\slike\ssqlite3PagerUnref()\sbut\sguarantees\sthat\sits\sargument\sis\snot\sa\nNULL\spointer.
|
||||||
D 2013-12-13T18:50:40.859
|
D 2013-12-13T19:35:21.600
|
||||||
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
||||||
F Makefile.in 2ef13430cd359f7b361bb863504e227b25cc7f81
|
F Makefile.in 2ef13430cd359f7b361bb863504e227b25cc7f81
|
||||||
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
||||||
@@ -166,7 +166,7 @@ F src/auth.c 523da7fb4979469955d822ff9298352d6b31de34
|
|||||||
F src/backup.c a729e63cf5cd1829507cb7b8e89f99b95141bb53
|
F src/backup.c a729e63cf5cd1829507cb7b8e89f99b95141bb53
|
||||||
F src/bitvec.c 19a4ba637bd85f8f63fc8c9bae5ade9fb05ec1cb
|
F src/bitvec.c 19a4ba637bd85f8f63fc8c9bae5ade9fb05ec1cb
|
||||||
F src/btmutex.c 976f45a12e37293e32cae0281b15a21d48a8aaa7
|
F src/btmutex.c 976f45a12e37293e32cae0281b15a21d48a8aaa7
|
||||||
F src/btree.c 09285d6ffe7d819b9656ea9b7ecf1ab949a926fb
|
F src/btree.c 11e29ef8cf16a42925fde036bcffbeffd9cc82df
|
||||||
F src/btree.h a61ddebc78c66795a2b93181321a116746302cc9
|
F src/btree.h a61ddebc78c66795a2b93181321a116746302cc9
|
||||||
F src/btreeInt.h f038e818bfadf75afbd09819ed93c26a333d39e0
|
F src/btreeInt.h f038e818bfadf75afbd09819ed93c26a333d39e0
|
||||||
F src/build.c 47ef8209e56d840d2b35b8a243c6ee567ad52bda
|
F src/build.c 47ef8209e56d840d2b35b8a243c6ee567ad52bda
|
||||||
@@ -207,8 +207,8 @@ F src/os.h 4a46270a64e9193af4a0aaa3bc2c66dc07c29b3f
|
|||||||
F src/os_common.h 92815ed65f805560b66166e3583470ff94478f04
|
F src/os_common.h 92815ed65f805560b66166e3583470ff94478f04
|
||||||
F src/os_unix.c 60a7b3b23e6fcf83a50d1e320b280b551724e11f
|
F src/os_unix.c 60a7b3b23e6fcf83a50d1e320b280b551724e11f
|
||||||
F src/os_win.c 16eac0961603182ffc10c02b39fe830126538e07
|
F src/os_win.c 16eac0961603182ffc10c02b39fe830126538e07
|
||||||
F src/pager.c 95a568497d789d5729927fca93fec653c485df45
|
F src/pager.c 4757194b2f1ffd65a5fc45a3df4d38acc41fb7b3
|
||||||
F src/pager.h 6a790b64a9ea79bc2c849bdefdd39e2344bca94a
|
F src/pager.h ffd5607f7b3e4590b415b007a4382f693334d428
|
||||||
F src/parse.y acee1a9958539e21263362b194594c5255ad2fca
|
F src/parse.y acee1a9958539e21263362b194594c5255ad2fca
|
||||||
F src/pcache.c f8043b433a57aba85384a531e3937a804432a346
|
F src/pcache.c f8043b433a57aba85384a531e3937a804432a346
|
||||||
F src/pcache.h a5e4f5d9f5d592051d91212c5949517971ae6222
|
F src/pcache.h a5e4f5d9f5d592051d91212c5949517971ae6222
|
||||||
@@ -1146,7 +1146,7 @@ F tool/vdbe-compress.tcl 0cf56e9263a152b84da86e75a5c0cdcdb7a47891
|
|||||||
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
||||||
F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01
|
F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01
|
||||||
F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff
|
F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff
|
||||||
P e2a8b280e84c1f8fd6106d9427e1ad6cbcfccd10
|
P a845779cd31aec3204a6a9c776bd9c9f7d47dd24
|
||||||
R 47d549dcdf3ed528411247342cb19e3a
|
R 0519b15291565e2dff816e0cb01e063b
|
||||||
U drh
|
U drh
|
||||||
Z da9f1c1b1e757ffeeb8c40974d788c01
|
Z 0b683c4f7d4e0f307681d123364409c6
|
||||||
|
@@ -1 +1 @@
|
|||||||
a845779cd31aec3204a6a9c776bd9c9f7d47dd24
|
e00f37e2333cac5b53e17cf764ab56c4fcd5f617
|
@@ -1673,10 +1673,11 @@ static void releasePage(MemPage *pPage){
|
|||||||
if( pPage ){
|
if( pPage ){
|
||||||
assert( pPage->aData );
|
assert( pPage->aData );
|
||||||
assert( pPage->pBt );
|
assert( pPage->pBt );
|
||||||
|
assert( pPage->pDbPage!=0 );
|
||||||
assert( sqlite3PagerGetExtra(pPage->pDbPage) == (void*)pPage );
|
assert( sqlite3PagerGetExtra(pPage->pDbPage) == (void*)pPage );
|
||||||
assert( sqlite3PagerGetData(pPage->pDbPage)==pPage->aData );
|
assert( sqlite3PagerGetData(pPage->pDbPage)==pPage->aData );
|
||||||
assert( sqlite3_mutex_held(pPage->pBt->mutex) );
|
assert( sqlite3_mutex_held(pPage->pBt->mutex) );
|
||||||
sqlite3PagerUnref(pPage->pDbPage);
|
sqlite3PagerUnrefNotNull(pPage->pDbPage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
23
src/pager.c
23
src/pager.c
@@ -1990,7 +1990,7 @@ static int pager_end_transaction(Pager *pPager, int hasMaster, int bCommit){
|
|||||||
PgHdr *p = pager_lookup(pPager, 1);
|
PgHdr *p = pager_lookup(pPager, 1);
|
||||||
if( p ){
|
if( p ){
|
||||||
p->pageHash = 0;
|
p->pageHash = 0;
|
||||||
sqlite3PagerUnref(p);
|
sqlite3PagerUnrefNotNull(p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -2983,7 +2983,7 @@ static int pagerUndoCallback(void *pCtx, Pgno iPg){
|
|||||||
if( rc==SQLITE_OK ){
|
if( rc==SQLITE_OK ){
|
||||||
pPager->xReiniter(pPg);
|
pPager->xReiniter(pPg);
|
||||||
}
|
}
|
||||||
sqlite3PagerUnref(pPg);
|
sqlite3PagerUnrefNotNull(pPg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5439,9 +5439,10 @@ DbPage *sqlite3PagerLookup(Pager *pPager, Pgno pgno){
|
|||||||
** are released, a rollback occurs and the lock on the database is
|
** are released, a rollback occurs and the lock on the database is
|
||||||
** removed.
|
** removed.
|
||||||
*/
|
*/
|
||||||
void sqlite3PagerUnref(DbPage *pPg){
|
void sqlite3PagerUnrefNotNull(DbPage *pPg){
|
||||||
if( pPg ){
|
Pager *pPager;
|
||||||
Pager *pPager = pPg->pPager;
|
assert( pPg!=0 );
|
||||||
|
pPager = pPg->pPager;
|
||||||
if( pPg->flags & PGHDR_MMAP ){
|
if( pPg->flags & PGHDR_MMAP ){
|
||||||
pagerReleaseMapPage(pPg);
|
pagerReleaseMapPage(pPg);
|
||||||
}else{
|
}else{
|
||||||
@@ -5449,6 +5450,8 @@ void sqlite3PagerUnref(DbPage *pPg){
|
|||||||
}
|
}
|
||||||
pagerUnlockIfUnused(pPager);
|
pagerUnlockIfUnused(pPager);
|
||||||
}
|
}
|
||||||
|
void sqlite3PagerUnref(DbPage *pPg){
|
||||||
|
if( pPg ) sqlite3PagerUnrefNotNull(pPg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -5830,14 +5833,14 @@ int sqlite3PagerWrite(DbPage *pDbPage){
|
|||||||
if( pPage->flags&PGHDR_NEED_SYNC ){
|
if( pPage->flags&PGHDR_NEED_SYNC ){
|
||||||
needSync = 1;
|
needSync = 1;
|
||||||
}
|
}
|
||||||
sqlite3PagerUnref(pPage);
|
sqlite3PagerUnrefNotNull(pPage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}else if( (pPage = pager_lookup(pPager, pg))!=0 ){
|
}else if( (pPage = pager_lookup(pPager, pg))!=0 ){
|
||||||
if( pPage->flags&PGHDR_NEED_SYNC ){
|
if( pPage->flags&PGHDR_NEED_SYNC ){
|
||||||
needSync = 1;
|
needSync = 1;
|
||||||
}
|
}
|
||||||
sqlite3PagerUnref(pPage);
|
sqlite3PagerUnrefNotNull(pPage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5853,7 +5856,7 @@ int sqlite3PagerWrite(DbPage *pDbPage){
|
|||||||
PgHdr *pPage = pager_lookup(pPager, pg1+ii);
|
PgHdr *pPage = pager_lookup(pPager, pg1+ii);
|
||||||
if( pPage ){
|
if( pPage ){
|
||||||
pPage->flags |= PGHDR_NEED_SYNC;
|
pPage->flags |= PGHDR_NEED_SYNC;
|
||||||
sqlite3PagerUnref(pPage);
|
sqlite3PagerUnrefNotNull(pPage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -6783,7 +6786,7 @@ int sqlite3PagerMovepage(Pager *pPager, DbPage *pPg, Pgno pgno, int isCommit){
|
|||||||
if( MEMDB ){
|
if( MEMDB ){
|
||||||
assert( pPgOld );
|
assert( pPgOld );
|
||||||
sqlite3PcacheMove(pPgOld, origPgno);
|
sqlite3PcacheMove(pPgOld, origPgno);
|
||||||
sqlite3PagerUnref(pPgOld);
|
sqlite3PagerUnrefNotNull(pPgOld);
|
||||||
}
|
}
|
||||||
|
|
||||||
if( needSyncPgno ){
|
if( needSyncPgno ){
|
||||||
@@ -6812,7 +6815,7 @@ int sqlite3PagerMovepage(Pager *pPager, DbPage *pPg, Pgno pgno, int isCommit){
|
|||||||
}
|
}
|
||||||
pPgHdr->flags |= PGHDR_NEED_SYNC;
|
pPgHdr->flags |= PGHDR_NEED_SYNC;
|
||||||
sqlite3PcacheMakeDirty(pPgHdr);
|
sqlite3PcacheMakeDirty(pPgHdr);
|
||||||
sqlite3PagerUnref(pPgHdr);
|
sqlite3PagerUnrefNotNull(pPgHdr);
|
||||||
}
|
}
|
||||||
|
|
||||||
return SQLITE_OK;
|
return SQLITE_OK;
|
||||||
|
@@ -136,6 +136,7 @@ int sqlite3PagerAcquire(Pager *pPager, Pgno pgno, DbPage **ppPage, int clrFlag);
|
|||||||
DbPage *sqlite3PagerLookup(Pager *pPager, Pgno pgno);
|
DbPage *sqlite3PagerLookup(Pager *pPager, Pgno pgno);
|
||||||
void sqlite3PagerRef(DbPage*);
|
void sqlite3PagerRef(DbPage*);
|
||||||
void sqlite3PagerUnref(DbPage*);
|
void sqlite3PagerUnref(DbPage*);
|
||||||
|
void sqlite3PagerUnrefNotNull(DbPage*);
|
||||||
|
|
||||||
/* Operations on page references. */
|
/* Operations on page references. */
|
||||||
int sqlite3PagerWrite(DbPage*);
|
int sqlite3PagerWrite(DbPage*);
|
||||||
|
Reference in New Issue
Block a user