From: drh Date: Tue, 5 Apr 2016 00:44:01 +0000 (+0000) Subject: Avoid unnecessary memset() operations in sqlite3PagerGet(). X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fheads%2Fpager-get-noinit;p=thirdparty%2Fsqlite.git Avoid unnecessary memset() operations in sqlite3PagerGet(). FossilOrigin-Name: 0c97b80240b38d60236cd8e1e51954b20f147eed --- diff --git a/manifest b/manifest index d2d4f94a79..a2aaeb95e2 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sdocumentation\stypos.\s\sComment\schanges\sonly.\s\sNo\schanges\sto\scode. -D 2016-04-04T18:04:56.616 +C Avoid\sunnecessary\smemset()\soperations\sin\ssqlite3PagerGet(). +D 2016-04-05T00:44:01.809 F Makefile.in e812bb732d7af01baa09f1278bd4f4a2e3a09449 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc fe57d7e3e74fa383fd01ced796c0ffd966fc094a @@ -316,7 +316,7 @@ F src/alter.c 1bb0709b3048e24217b80ec6bd78a3e99a47c01b F src/analyze.c 37fedc80ac966ce1745811746e68e4d8fa64c7fe F src/attach.c 771153bd1f4ab0b97a44a13dde2c7e5e1efeba22 F src/auth.c b56c78ebe40a2110fd361379f7e8162d23f92240 -F src/backup.c f60f0aa55d25d853ffde53d0b0370a7bb7ee41ce +F src/backup.c dae481a88ceac8c85d02feb9fc13f11bea10f24d F src/bitvec.c 3ee4c8b2c94ed3a7377256e18199e6ff5cf33f63 F src/btmutex.c bc87dd3b062cc26edfe79918de2200ccb8d41e73 F src/btree.c 577fb5674e2f0aa0a38246afc19e1885a0b8c9b0 @@ -362,8 +362,8 @@ F src/os_setup.h c9d4553b5aaa6f73391448b265b89bed0b890faa F src/os_unix.c b1ccb273771f41dbdbe0ba7c1ad63c38ad5972ec F src/os_win.c b3ba9573d8d893e70a6a8015bbee572ecf7ffbef F src/os_win.h eb7a47aa17b26b77eb97e4823f20a00b8bda12ca -F src/pager.c 38718a019ca762ba4f6795425d5a54db70d1790d -F src/pager.h e1d38a2f14849e219df0f91f8323504d134c8a56 +F src/pager.c b0abe7268c7efc25e3b329cd1d55923d3bdf0705 +F src/pager.h 97f153d13cb1bc64a2de364b7f0dd051bed3826b F src/parse.y 5ea8c81c5c41b27887f41b4a7e1c58470d7d3821 F src/pcache.c 647bb53a86b7bbcf55ad88089b3ea5a9170b90df F src/pcache.h 4d0ccaad264d360981ec5e6a2b596d6e85242545 @@ -1482,7 +1482,10 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P cefd36ff7b7f142bcebdb16b4d24ae274cdf2709 -R febb375a1eed9f049740185e3c47f862 +P d5fc2f7f90f8cbd53810c7a445b0e9c9a0e39182 +R c1c23067879b7a5d3fdca7f8c951a0ef +T *branch * pager-get-noinit +T *sym-pager-get-noinit * +T -sym-trunk * U drh -Z 64b7ed851fe55fe722cd357618c3eec9 +Z 4a821fc54fdcd1552370cc71dc24d776 diff --git a/manifest.uuid b/manifest.uuid index 0654e5fabc..f3324bfe55 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -d5fc2f7f90f8cbd53810c7a445b0e9c9a0e39182 \ No newline at end of file +0c97b80240b38d60236cd8e1e51954b20f147eed \ No newline at end of file diff --git a/src/backup.c b/src/backup.c index 455671a1ad..9efa5c55f7 100644 --- a/src/backup.c +++ b/src/backup.c @@ -293,7 +293,8 @@ static int backupOnePage( DbPage *pDestPg = 0; Pgno iDest = (Pgno)(iOff/nDestPgsz)+1; if( iDest==PENDING_BYTE_PAGE(p->pDest->pBt) ) continue; - if( SQLITE_OK==(rc = sqlite3PagerGet(pDestPager, iDest, &pDestPg, 0)) + if( SQLITE_OK==(rc = sqlite3PagerGet(pDestPager, iDest, &pDestPg, + PAGER_GET_NOINIT)) && SQLITE_OK==(rc = sqlite3PagerWrite(pDestPg)) ){ const u8 *zIn = &zSrcData[iOff%nSrcPgsz]; diff --git a/src/pager.c b/src/pager.c index c18b3a32f7..49272db81d 100644 --- a/src/pager.c +++ b/src/pager.c @@ -5300,7 +5300,7 @@ int sqlite3PagerGet( int rc = SQLITE_OK; PgHdr *pPg = 0; u32 iFrame = 0; /* Frame to read from WAL file */ - const int noContent = (flags & PAGER_GET_NOCONTENT); +#define noContent ((flags & PAGER_GET_NOCONTENT)!=0) /* It is acceptable to use a read-only (mmap) page for any page except ** page 1 if there is no write-transaction open or the ACQUIRE_READONLY @@ -5432,8 +5432,10 @@ int sqlite3PagerGet( testcase( rc==SQLITE_NOMEM ); sqlite3EndBenignMalloc(); } - memset(pPg->pData, 0, pPager->pageSize); - IOTRACE(("ZERO %p %d\n", pPager, pgno)); + if( (flags & PAGER_GET_NOINIT)==0 ){ + memset(pPg->pData, 0, pPager->pageSize); + IOTRACE(("ZERO %p %d\n", pPager, pgno)); + } }else{ if( pagerUseWal(pPager) && bMmapOk==0 ){ rc = sqlite3WalFindFrame(pPager->pWal, pgno, &iFrame); @@ -5461,6 +5463,7 @@ pager_acquire_err: *ppPage = 0; return rc; } +#undef noContent /* ** Acquire a page if it is already in the in-memory cache. Do diff --git a/src/pager.h b/src/pager.h index 38a4982150..f0d23ed9f5 100644 --- a/src/pager.h +++ b/src/pager.h @@ -83,6 +83,7 @@ typedef struct PgHdr DbPage; */ #define PAGER_GET_NOCONTENT 0x01 /* Do not load data from disk */ #define PAGER_GET_READONLY 0x02 /* Read-only page is acceptable */ +#define PAGER_GET_NOINIT 0x04 /* Do not initialize the page */ /* ** Flags for sqlite3PagerSetFlags()