diff options
author | drh <drh@noemail.net> | 2013-10-21 13:15:55 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2013-10-21 13:15:55 +0000 |
commit | ee68ccfbad78a0bcc542789eddb09aed960940a5 (patch) | |
tree | 6e0293c13116fddcb5e3c6d9050b7b1f7404013d /src/test_multiplex.c | |
parent | 05684271c62efe2aefb39c536b628e260cc0a872 (diff) | |
download | sqlite-ee68ccfbad78a0bcc542789eddb09aed960940a5.tar.gz sqlite-ee68ccfbad78a0bcc542789eddb09aed960940a5.zip |
Drop the mutex on the multiplexor before entering the xRead VFS call.
FossilOrigin-Name: a00d2ed49c9f53263cd76ad41dad9e35e646ebb5
Diffstat (limited to 'src/test_multiplex.c')
-rw-r--r-- | src/test_multiplex.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/test_multiplex.c b/src/test_multiplex.c index 624541b32..469823094 100644 --- a/src/test_multiplex.c +++ b/src/test_multiplex.c @@ -755,9 +755,11 @@ static int multiplexRead( multiplexConn *p = (multiplexConn*)pConn; multiplexGroup *pGroup = p->pGroup; int rc = SQLITE_OK; - multiplexEnter(); + int nMutex = 0; + multiplexEnter(); nMutex++; if( !pGroup->bEnabled ){ sqlite3_file *pSubOpen = multiplexSubOpen(pGroup, 0, &rc, NULL, 0); + multiplexLeave(); nMutex--; if( pSubOpen==0 ){ rc = SQLITE_IOERR_READ; }else{ @@ -766,7 +768,9 @@ static int multiplexRead( }else{ while( iAmt > 0 ){ int i = (int)(iOfst / pGroup->szChunk); + if( nMutex==0 ){ multiplexEnter(); nMutex++; } sqlite3_file *pSubOpen = multiplexSubOpen(pGroup, i, &rc, NULL, 1); + multiplexLeave(); nMutex--; if( pSubOpen ){ int extra = ((int)(iOfst % pGroup->szChunk) + iAmt) - pGroup->szChunk; if( extra<0 ) extra = 0; @@ -783,7 +787,8 @@ static int multiplexRead( } } } - multiplexLeave(); + assert( nMutex==0 || nMutex==1 ); + if( nMutex ) multiplexLeave(); return rc; } |