]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Do not write master journal filenames into server-mode journal files. Use
authordan <dan@noemail.net>
Thu, 27 Apr 2017 14:12:43 +0000 (14:12 +0000)
committerdan <dan@noemail.net>
Thu, 27 Apr 2017 14:12:43 +0000 (14:12 +0000)
SQLITE_MUTEX_STATIC_APP1 to protect critical sections in server.c.

FossilOrigin-Name: 3144ae40d2eb63dfd5587579a49163ea1add5947d624daa478ada13339495af4

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

index e1c7caeb8239af96da58243d60489415d2913388..529f6190856235bcace7b4e7086be7facedb0039 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C If\spossible,\sdelete\sthe\sjournal\sfile\swhen\sa\sdatabase\sconnection\sis\sclosed.
-D 2017-04-27T13:05:43.621
+C Do\snot\swrite\smaster\sjournal\sfilenames\sinto\sserver-mode\sjournal\sfiles.\sUse\nSQLITE_MUTEX_STATIC_APP1\sto\sprotect\scritical\ssections\sin\sserver.c.
+D 2017-04-27T14:12:43.330
 F Makefile.in 1cc758ce3374a32425e4d130c2fe7b026b20de5b8843243de75f087c0a2661fb
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc 6a8c838220f7c00820e1fc0ac1bccaaa8e5676067e1dbfa1bafa7a4ffecf8ae6
@@ -389,7 +389,7 @@ F src/os_setup.h 0dbaea40a7d36bf311613d31342e0b99e2536586
 F src/os_unix.c 30e2c43e4955db990e5b5a81e901f8aa74cc8820
 F src/os_win.c 2a6c73eef01c51a048cc4ddccd57f981afbec18a
 F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a
-F src/pager.c 06b5d925ee44ce2dce1f8b55833312069377d6a9d4e8acfe466ad2767bd54d01
+F src/pager.c ba9b474f886b79b1e8de087240179c74198a3a11de6b16cc48e14084f562c38d
 F src/pager.h 54f5321bc48768610a3a000d2f821fb849cbda35339abd185ceb5f214faf10bf
 F src/parse.y 0513387ce02fea97897d8caef82d45f347818593f24f1bdc48e0c530a8af122d
 F src/pcache.c 62835bed959e2914edd26afadfecce29ece0e870
@@ -403,7 +403,7 @@ F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384
 F src/resolve.c 3e518b962d932a997fae373366880fc028c75706
 F src/rowset.c 7b7e7e479212e65b723bf40128c7b36dc5afdfac
 F src/select.c bf8ab605e49717c222136380453cfb7eda564f8e500d5ff6a01341ea59fefe80
-F src/server.c bbc32009028b3fb778b9bb2ea426e9acd7b8a5904f808075502bc43e75f50da0
+F src/server.c 1e930af2d0181600d36126b60c44456741c7503188d88eb324679a688ba6da90
 F src/shell.c 21b79c0e1b93f8e35fd7b4087d6ba438326c3d7e285d0dd51dfd741475f858a1
 F src/sqlite.h.in f6e3734fee6d334a896cff8f43446ca2e47dcf7e39135b3e3a596bf23cdbbc97
 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
@@ -1580,7 +1580,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 64ecf7c7e512827e8a5a42f9f3ad92ff57ec868820e3943dbc74d5823f9a889d
-R 2c66e9c685902346d0d00b9da82f87dd
+P d5b5326df25b85b1c3926cd693bcde1ca08e6e03b8aea151a82d222fc9c23dd6
+R c361ed394cbf7d5d3ff166b253e6e420
 U dan
-Z 084a9af7e4f3882f37830efa9cfd75a1
+Z 609d068095d8e4dd56c2feec5f2f04e4
index e0e55a81f1fa9e98fb7762996e33b8eda035feff..3828257dc272b9716064aff73bf974383a07261d 100644 (file)
@@ -1 +1 @@
-d5b5326df25b85b1c3926cd693bcde1ca08e6e03b8aea151a82d222fc9c23dd6
\ No newline at end of file
+3144ae40d2eb63dfd5587579a49163ea1add5947d624daa478ada13339495af4
\ No newline at end of file
index a52926eef2e84504752a58e85b042cfb226515d5..4d44048b9d327313b60dde91ebae628354cef68d 100644 (file)
@@ -6439,6 +6439,10 @@ int sqlite3PagerCommitPhaseOne(
     ** backup in progress needs to be restarted.  */
     sqlite3BackupRestart(pPager->pBackup);
   }else{
+    /* If this connection is in server mode, ignore any master journal. */
+    if( pagerIsServer(pPager) ){
+      zMaster = 0;
+    }
     if( pagerUseWal(pPager) ){
       PgHdr *pList = sqlite3PcacheDirtyList(pPager->pPCache);
       PgHdr *pPageOne = 0;
index 9bcac9db9d4664a4fb1062ce1e76971658325600..3b8a8f00ea6f8d7e29806b2cc883443e426d1df5 100644 (file)
@@ -50,8 +50,7 @@
 typedef struct ServerHMA ServerHMA;
 
 struct ServerGlobal {
-  sqlite3_mutex *mutex;
-  ServerHMA *pHma;
+  ServerHMA *pHma;                /* Linked list of all ServerHMA objects */
 };
 static struct ServerGlobal g_server;
 
@@ -85,6 +84,19 @@ struct Server {
 #define SERVER_READ_LOCK  2
 #define SERVER_NO_LOCK    1
 
+/*
+** Global mutex functions used by code in this file.
+*/
+static void serverEnterMutex(void){
+  sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_APP1));
+}
+static void serverLeaveMutex(void){
+  sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_APP1));
+}
+static void serverAssertMutexHeld(void){
+  assert( sqlite3_mutex_held(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_APP1)) );
+}
+
 static int posixLock(int fd, int iSlot, int eLock, int bBlock){
   int res;
   struct flock l;
@@ -134,7 +146,7 @@ static int serverOpenHma(Pager *pPager, const char *zPath, ServerHMA **ppHma){
   int rc = SQLITE_OK;             /* Return code */
   ServerHMA *pHma = 0;
 
-  assert( sqlite3_mutex_held(g_server.mutex) );
+  serverAssertMutexHeld();
 
   res = stat(zPath, &sStat);
   if( res!=0 ){
@@ -229,7 +241,7 @@ static u32 *serverClientSlot(Server *p, int iClient){
 void sqlite3ServerDisconnect(Server *p, sqlite3_file *dbfd){
   if( p->pHma ){
     ServerHMA *pHma = p->pHma;
-    sqlite3_mutex_enter(g_server.mutex);
+    serverEnterMutex();
     if( p->iClient>=0 ){
       u32 *pSlot = serverClientSlot(p, p->iClient);
       *pSlot = 0;
@@ -244,7 +256,7 @@ void sqlite3ServerDisconnect(Server *p, sqlite3_file *dbfd){
       unlink(pHma->zName);
     }
     serverDecrHmaRefcount(pHma);
-    sqlite3_mutex_leave(g_server.mutex);
+    serverLeaveMutex();
   }
   sqlite3_free(p->aLock);
   sqlite3_free(p);
@@ -299,7 +311,7 @@ int sqlite3ServerConnect(
     p->iClient = -1;
     p->pPager = pPager;
 
-    sqlite3_mutex_enter(g_server.mutex);
+    serverEnterMutex();
     rc = serverOpenHma(pPager, zPath, &p->pHma);
 
     /* File is now mapped. Find a free client slot. */
@@ -333,7 +345,7 @@ int sqlite3ServerConnect(
       }
     }
 
-    sqlite3_mutex_leave(g_server.mutex);
+    serverLeaveMutex();
   }
 
   if( rc!=SQLITE_OK ){
@@ -356,7 +368,7 @@ static int serverOvercomeLock(Server *p, int bWrite, u32 v, int *pbRetry){
   }
   assert( iBlock<HMA_CLIENT_SLOTS );
 
-  sqlite3_mutex_enter(g_server.mutex);
+  serverEnterMutex();
   if( p->pHma->aClient[iBlock] ){
     bLocal = 1;
   }else{
@@ -375,7 +387,7 @@ static int serverOvercomeLock(Server *p, int bWrite, u32 v, int *pbRetry){
     assert( rc==SQLITE_OK || rc==SQLITE_BUSY );
     rc = SQLITE_OK;
   }
-  sqlite3_mutex_leave(g_server.mutex);
+  serverLeaveMutex();
 
   return rc;
 }