-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
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
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
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
-d5b5326df25b85b1c3926cd693bcde1ca08e6e03b8aea151a82d222fc9c23dd6
\ No newline at end of file
+3144ae40d2eb63dfd5587579a49163ea1add5947d624daa478ada13339495af4
\ No newline at end of file
** 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;
typedef struct ServerHMA ServerHMA;
struct ServerGlobal {
- sqlite3_mutex *mutex;
- ServerHMA *pHma;
+ ServerHMA *pHma; /* Linked list of all ServerHMA objects */
};
static struct ServerGlobal g_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;
int rc = SQLITE_OK; /* Return code */
ServerHMA *pHma = 0;
- assert( sqlite3_mutex_held(g_server.mutex) );
+ serverAssertMutexHeld();
res = stat(zPath, &sStat);
if( res!=0 ){
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;
unlink(pHma->zName);
}
serverDecrHmaRefcount(pHma);
- sqlite3_mutex_leave(g_server.mutex);
+ serverLeaveMutex();
}
sqlite3_free(p->aLock);
sqlite3_free(p);
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. */
}
}
- sqlite3_mutex_leave(g_server.mutex);
+ serverLeaveMutex();
}
if( rc!=SQLITE_OK ){
}
assert( iBlock<HMA_CLIENT_SLOTS );
- sqlite3_mutex_enter(g_server.mutex);
+ serverEnterMutex();
if( p->pHma->aClient[iBlock] ){
bLocal = 1;
}else{
assert( rc==SQLITE_OK || rc==SQLITE_BUSY );
rc = SQLITE_OK;
}
- sqlite3_mutex_leave(g_server.mutex);
+ serverLeaveMutex();
return rc;
}