]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix a bug on this branch involving mmap mode and readonly transactions.
authordan <dan@noemail.net>
Mon, 7 Aug 2017 14:06:01 +0000 (14:06 +0000)
committerdan <dan@noemail.net>
Mon, 7 Aug 2017 14:06:01 +0000 (14:06 +0000)
FossilOrigin-Name: 355c594e821bb5ad782faf0e8d512305f4e1d7fd60949887a8270beed67d03e3

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

index aa980ac04d8c86e1aa027a0b110daa4ba7d62205..163a29b0a80b028a1bf396073c9e61bae9027040 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\sdocumentation\sfile\s./README-server-edition.html.
-D 2017-07-31T19:55:56.996
+C Fix\sa\sbug\son\sthis\sbranch\sinvolving\smmap\smode\sand\sreadonly\stransactions.
+D 2017-08-07T14:06:01.846
 F Makefile.in d9873c9925917cca9990ee24be17eb9613a668012c85a343aef7e5536ae266e8
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc 02b469e9dcd5b7ee63fc1fb05babc174260ee4cfa4e0ef2e48c3c6801567a016
@@ -440,7 +440,7 @@ F src/os_setup.h 0dbaea40a7d36bf311613d31342e0b99e2536586
 F src/os_unix.c 98df292b72d8c15c6292be663ee917ac0316a0d9ec652e6e55e06bc4d83f84b7
 F src/os_win.c 2a6c73eef01c51a048cc4ddccd57f981afbec18a
 F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a
-F src/pager.c 9c2006fb3c4d4a985e79de21cb5e5be22c8ae663159cbd0bf5e708803bf53678
+F src/pager.c d03c63437f7218c1a1f28b8ca4427afc6df13610a8a488a8a0a505d0a117deeb
 F src/pager.h 316dac0671fd7555af9e73d4357febd5f2d3ce6a185ffd8d77b7fc0423ac8b1a
 F src/parse.y 3a1babd6645a8103898a5e7e239dcf56cdafbdc25fd8133bb4a9160f9471d42d
 F src/pcache.c 62835bed959e2914edd26afadfecce29ece0e870
@@ -454,8 +454,8 @@ F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384
 F src/resolve.c 4324a94573b1e29286f8121e4881db59eaedc014afeb274c8d3e07ed282e0e20
 F src/rowset.c 7b7e7e479212e65b723bf40128c7b36dc5afdfac
 F src/select.c c6bf96a7f9d7d68f929de84738c599a30d0a725ab0b54420e70545743cd5ee7b
-F src/server.c ef4a69ea4124c89fe73ee0889929c089290e240a3a5f27fa28beea51cb855e51
-F src/server.h adcc122084f9370c91479bd9f7bbac1ccd7f63784249de40f63dae8a9fae1bfe
+F src/server.c d69efa7284074e69d43c38d5d649ef3b20add1db31c9d8e7f01cabd95d0ee72b
+F src/server.h d7555e68ee34008ca02705e44f861938a67b85a97ffe64d9326e03bd15dcd06b
 F src/shell.c bd6a37cbe8bf64ef6a6a74fdc50f067d3148149b4ce2b4d03154663e66ded55f
 F src/shell.c.in b5725acacba95ccefa57b6d068f710e29ba8239c3aa704628a1902a1f729c175
 F src/sqlite.h.in 753ca32f31228a250a3a22ba90b0a39d21913cdc765dce9600e54ab872243f48
@@ -1647,7 +1647,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P b42c87790e2dfdc4e52c42967257decf4b44ded909403ea4ac47fe41acfd7077
-R 0649fc2cf3ba1c03f8e547dfbc16afc9
+P fbc4f4ad259cfe04b28d698ef025f179b6708ac788939976c401db2caf8f92c1
+R eae9c7f2718fecb4f38f6083d68585eb
 U dan
-Z c48da8fd6893915c8bae54b12ad68f68
+Z 6ffb27438a4983c698bbeb9ee0c29536
index 16ed4d7fdda69402badf46b17282fd7d392f947c..9241ba91be529e6a7b0b355a2fba19e512169d8a 100644 (file)
@@ -1 +1 @@
-fbc4f4ad259cfe04b28d698ef025f179b6708ac788939976c401db2caf8f92c1
\ No newline at end of file
+355c594e821bb5ad782faf0e8d512305f4e1d7fd60949887a8270beed67d03e3
\ No newline at end of file
index ab232f8c602726a0517205ec2109931dd40ad542..e83ee0a406a9b8a0569ad2ba10519df689d48731 100644 (file)
@@ -1052,6 +1052,9 @@ static void setGetterMethod(Pager *pPager){
     pPager->xGet = getPageError;
 #if SQLITE_MAX_MMAP_SIZE>0
   }else if( USEFETCH(pPager)
+#ifdef SQLITE_SERVER_EDITION
+   && sqlite3ServerIsReadonly(pPager->pServer)==0
+#endif
 #ifdef SQLITE_HAS_CODEC
    && pPager->xCodec==0
 #endif
@@ -5453,6 +5456,7 @@ int sqlite3PagerSharedLock(Pager *pPager, int bReadonly){
     if( rc==SQLITE_OK ){
       rc = sqlite3ServerLock(pPager->pServer, 1, 0, 0);
     }
+    setGetterMethod(pPager);
   }
 #endif
   if( rc==SQLITE_OK && pagerUseWal(pPager) ){
index 2e0ac47cfca0e9f68d2700a711940c4f23189493..26193640abae4cd46343e1df13e454025428eefc 100644 (file)
@@ -691,4 +691,14 @@ ServerPage *sqlite3ServerBuffer(Server *p){
   return pRet;
 }
 
+/*
+** Return true if the handle passed as the only argument is not NULL and
+** currently has an open readonly transaction (one started with BEGIN
+** READONLY). Return false if the argument is NULL, if there is no open
+** transaction, or if the open transaction is read/write.
+*/
+int sqlite3ServerIsReadonly(Server *p){
+  return (p && p->eTrans==SERVER_TRANS_READONLY);
+}
+
 #endif /* ifdef SQLITE_SERVER_EDITION */
index a86bd0a38f04971ce28aa325a5c9d2ebeabf64c5..30bdf5dd3a9ccff3fb38b8ce9eb3312996dcb7bb 100644 (file)
@@ -47,6 +47,7 @@ int sqlite3ServerHasLock(Server *p, Pgno pgno, int bWrite);
 ServerPage *sqlite3ServerBuffer(Server*);
 
 /* For "BEGIN READONLY" clients. */
+int sqlite3ServerIsReadonly(Server*);
 void sqlite3ServerReadPage(Server*, Pgno, u8**);
 void sqlite3ServerEndReadPage(Server*, Pgno);