Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Pick up a small performance increase by eliminating the pcacheRef() function. (CVS 5609) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
e3840fbf0adf824941a4b9b3cac3a869 |
User & Date: | danielk1977 2008-08-25 14:49:42.000 |
Context
2008-08-25
| ||
17:23 | Fix bug in the premutation testing that was causing many permutations from begin skipped. There are now 16 errors reported by the permutation test. (CVS 5610) (check-in: 4ad096bda1 user: drh tags: trunk) | |
14:49 | Pick up a small performance increase by eliminating the pcacheRef() function. (CVS 5609) (check-in: e3840fbf0a user: danielk1977 tags: trunk) | |
12:14 | Additional coverage testing in the new name resolver module. (CVS 5608) (check-in: 0d61960afd user: drh tags: trunk) | |
Changes
Changes to src/pcache.c.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* ** 2008 August 05 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: ** ** May you do good and not evil. ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** This file implements that page cache. ** | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /* ** 2008 August 05 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: ** ** May you do good and not evil. ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** This file implements that page cache. ** ** @(#) $Id: pcache.c,v 1.13 2008/08/25 14:49:42 danielk1977 Exp $ */ #include "sqliteInt.h" /* ** A complete page cache is an instance of this structure. */ struct PCache { |
︙ | ︙ | |||
107 108 109 110 111 112 113 | ** Deadlock within the module is avoided by never blocking on the MEM2 ** mutex while the LRU mutex is held. */ #define pcacheEnterGlobal() sqlite3_mutex_enter(pcache.mutex_lru) #define pcacheExitGlobal() sqlite3_mutex_leave(pcache.mutex_lru) | < < < < < < < < < < < < < < < < < < < < | 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | ** Deadlock within the module is avoided by never blocking on the MEM2 ** mutex while the LRU mutex is held. */ #define pcacheEnterGlobal() sqlite3_mutex_enter(pcache.mutex_lru) #define pcacheExitGlobal() sqlite3_mutex_leave(pcache.mutex_lru) /********************************** Linked List Management ********************/ #ifndef NDEBUG /* ** This routine verifies that the number of entries in the hash table ** is pCache->nPage. This routine is used within assert() statements ** only and is therefore disabled during production builds. |
︙ | ︙ | |||
654 655 656 657 658 659 660 | for(pPage=pCache->apHash[h]; pPage; pPage=pPage->pNextHash){ if( pPage->pgno==pgno ){ if( pPage->nRef==0 /* && (pPage->flags & PGHDR_DIRTY)==0 */ ){ pcacheEnterGlobal(); pcacheRemoveFromLruList(pPage); pcacheExitGlobal(); } | > | > | 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 | for(pPage=pCache->apHash[h]; pPage; pPage=pPage->pNextHash){ if( pPage->pgno==pgno ){ if( pPage->nRef==0 /* && (pPage->flags & PGHDR_DIRTY)==0 */ ){ pcacheEnterGlobal(); pcacheRemoveFromLruList(pPage); pcacheExitGlobal(); } if( (pPage->nRef++)==0 ){ pCache->nRef++; } *ppPage = pPage; return SQLITE_OK; } } } if( createFlag ){ |
︙ | ︙ | |||
678 679 680 681 682 683 684 | if( pPage==0 ){ return SQLITE_NOMEM; } pPage->pPager = 0; pPage->flags = 0; pPage->pDirty = 0; | < | > | | > > | | | | | | | > | | | 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 | if( pPage==0 ){ return SQLITE_NOMEM; } pPage->pPager = 0; pPage->flags = 0; pPage->pDirty = 0; pPage->pgno = pgno; pPage->pCache = pCache; pPage->nRef = 1; pCache->nRef++; pcacheAddToList(&pCache->pClean, pPage); pcacheAddToHash(pPage); }else{ *ppPage = 0; } return SQLITE_OK; } /* ** Dereference a page. When the reference count reaches zero, ** move the page to the LRU list if it is clean. */ void sqlite3PcacheRelease(PgHdr *p){ assert( p->nRef>0 ); assert( p->pCache->iInUseDB || p->pCache->iInUseMM ); p->nRef--; if( p->nRef==0 ){ PCache *pCache = p->pCache; pCache->nRef--; if( p->pCache->xDestroy ){ p->pCache->xDestroy(p); } #if 0 if( (p->flags & PGHDR_DIRTY)!=0 ) return; #endif pcacheEnterGlobal(); pcacheAddToLruList(p); pcacheExitGlobal(); } } void sqlite3PcacheRef(PgHdr *p){ assert(p->nRef>0); p->nRef++; } /* ** Drop a page from the cache. This should be the only reference to ** the page. */ void sqlite3PcacheDrop(PgHdr *p){ |
︙ | ︙ |