]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Avoid unnecessary memset() operations in sqlite3PagerGet(). pager-get-noinit
authordrh <drh@noemail.net>
Tue, 5 Apr 2016 00:44:01 +0000 (00:44 +0000)
committerdrh <drh@noemail.net>
Tue, 5 Apr 2016 00:44:01 +0000 (00:44 +0000)
FossilOrigin-Name: 0c97b80240b38d60236cd8e1e51954b20f147eed

manifest
manifest.uuid
src/backup.c
src/pager.c
src/pager.h

index d2d4f94a793aa711e690a5607796b2c0fb68d8f7..a2aaeb95e25638503d17ddbf435b89246fc54c12 100644 (file)
--- 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
index 0654e5fabcf24927cc2f687597fdd30620a90725..f3324bfe55d196b1638a9b7faad64f336ec7a618 100644 (file)
@@ -1 +1 @@
-d5fc2f7f90f8cbd53810c7a445b0e9c9a0e39182
\ No newline at end of file
+0c97b80240b38d60236cd8e1e51954b20f147eed
\ No newline at end of file
index 455671a1adfd15dc74b94ae025623153c07735a4..9efa5c55f7131c5ae864cd553a1cfe23a63d18a0 100644 (file)
@@ -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];
index c18b3a32f7b1fb98b3f0a2ecfe689af4e16e6927..49272db81d41ded53163b022d9b81f8a4eb70131 100644 (file)
@@ -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
index 38a49821502abce061611dead335dfa42d5fc039..f0d23ed9f5b2c3e68b340873c8420435221865ba 100644 (file)
@@ -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()