mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-30 19:03:16 +03:00
Improve concurrency in test_multiplex.c. Add a switch to "threadtest3" allowing it to run using the multiplexor VFS.
FossilOrigin-Name: 9d2c62b04e3a9ac5d9adea2aac7ec3f3bc3e88bd
This commit is contained in:
4
main.mk
4
main.mk
@ -795,8 +795,8 @@ THREADTEST3_SRC = $(TOP)/test/threadtest3.c \
|
|||||||
$(TOP)/test/tt3_stress.c \
|
$(TOP)/test/tt3_stress.c \
|
||||||
$(TOP)/test/tt3_lookaside1.c
|
$(TOP)/test/tt3_lookaside1.c
|
||||||
|
|
||||||
threadtest3$(EXE): sqlite3.o $(THREADTEST3_SRC)
|
threadtest3$(EXE): libsqlite3.a $(THREADTEST3_SRC) $(TOP)/src/test_multiplex.c
|
||||||
$(TCCX) $(TOP)/test/threadtest3.c sqlite3.o -o $@ $(THREADLIB)
|
$(TCCX) $(TOP)/test/threadtest3.c $(TOP)/src/test_multiplex.c libsqlite3.a -o $@ $(THREADLIB)
|
||||||
|
|
||||||
threadtest: threadtest3$(EXE)
|
threadtest: threadtest3$(EXE)
|
||||||
./threadtest3$(EXE)
|
./threadtest3$(EXE)
|
||||||
|
18
manifest
18
manifest
@ -1,5 +1,5 @@
|
|||||||
C A\sunix\sVFS\schange\sreplaces\sfsync()\swith\sfstat()\swhen\susing\sSQLITE_NO_SYNC,\sso\nset\sPRAGMA\ssynchronous=OFF\sin\sthe\ssysfault-3\stest\sto\savoid\serroneously\scausing\nerrors\sin\sxSync.
|
C Improve\sconcurrency\sin\stest_multiplex.c.\sAdd\sa\sswitch\sto\s"threadtest3"\sallowing\sit\sto\srun\susing\sthe\smultiplexor\sVFS.
|
||||||
D 2015-12-03T01:48:32.232
|
D 2015-12-03T11:51:18.767
|
||||||
F Makefile.in 23d9a63484a383fc64951b25ef44067930f98dc6
|
F Makefile.in 23d9a63484a383fc64951b25ef44067930f98dc6
|
||||||
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
|
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
|
||||||
F Makefile.msc e8fdca1cb89a1b58b5f4d3a130ea9a3d28cb314d
|
F Makefile.msc e8fdca1cb89a1b58b5f4d3a130ea9a3d28cb314d
|
||||||
@ -263,7 +263,7 @@ F ext/userauth/userauth.c 5fa3bdb492f481bbc1709fc83c91ebd13460c69e
|
|||||||
F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
|
F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
|
||||||
F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8
|
F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8
|
||||||
F magic.txt 8273bf49ba3b0c8559cb2774495390c31fd61c60
|
F magic.txt 8273bf49ba3b0c8559cb2774495390c31fd61c60
|
||||||
F main.mk 9001039f432baeba1074e2d1885f3dfd572b8636
|
F main.mk 2a1196d5e10ce062862b24a4cf9a985fe477de34
|
||||||
F mkso.sh fd21c06b063bb16a5d25deea1752c2da6ac3ed83
|
F mkso.sh fd21c06b063bb16a5d25deea1752c2da6ac3ed83
|
||||||
F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271
|
F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271
|
||||||
F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504
|
F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504
|
||||||
@ -375,7 +375,7 @@ F src/test_intarray.h 9dc57417fb65bc7835cc18548852cc08cc062202
|
|||||||
F src/test_journal.c 5360fbe1d1e4416ca36290562fd5a2e3f70f32aa
|
F src/test_journal.c 5360fbe1d1e4416ca36290562fd5a2e3f70f32aa
|
||||||
F src/test_loadext.c a5251f956ab6af21e138dc1f9c0399394a510cb4
|
F src/test_loadext.c a5251f956ab6af21e138dc1f9c0399394a510cb4
|
||||||
F src/test_malloc.c 8e1c2112fa4f543b46c990a8872f9e6d37938744
|
F src/test_malloc.c 8e1c2112fa4f543b46c990a8872f9e6d37938744
|
||||||
F src/test_multiplex.c 9fefd23f6cc3fa9bf0748a5e453167e7b9f193ce
|
F src/test_multiplex.c 6a088d8d9d4aad4bec45dd8878af11b15900702d
|
||||||
F src/test_multiplex.h c08e4e8f8651f0c5e0509b138ff4d5b43ed1f5d3
|
F src/test_multiplex.h c08e4e8f8651f0c5e0509b138ff4d5b43ed1f5d3
|
||||||
F src/test_mutex.c dbdfaff8580071f2212a0deae3325a93a737819c
|
F src/test_mutex.c dbdfaff8580071f2212a0deae3325a93a737819c
|
||||||
F src/test_onefile.c 38f7cbe79d5bafe95bde683cc3a53b8ca16daf10
|
F src/test_onefile.c 38f7cbe79d5bafe95bde683cc3a53b8ca16daf10
|
||||||
@ -1074,7 +1074,7 @@ F test/thread2.test f35d2106452b77523b3a2b7d1dcde2e5ee8f9e46
|
|||||||
F test/thread_common.tcl 334639cadcb9f912bf82aa73f49efd5282e6cadd
|
F test/thread_common.tcl 334639cadcb9f912bf82aa73f49efd5282e6cadd
|
||||||
F test/threadtest1.c 6029d9c5567db28e6dc908a0c63099c3ba6c383b
|
F test/threadtest1.c 6029d9c5567db28e6dc908a0c63099c3ba6c383b
|
||||||
F test/threadtest2.c a70a8e94bef23339d34226eb9521015ef99f4df8
|
F test/threadtest2.c a70a8e94bef23339d34226eb9521015ef99f4df8
|
||||||
F test/threadtest3.c 0707c28e0954acbef654f91675e14f3573cf9a10
|
F test/threadtest3.c 469ea7fe7030d75bd67dcf8047b16c1deea5210d
|
||||||
F test/threadtest4.c c1e67136ceb6c7ec8184e56ac61db28f96bd2925
|
F test/threadtest4.c c1e67136ceb6c7ec8184e56ac61db28f96bd2925
|
||||||
F test/tkt-02a8e81d44.test 6c80d9c7514e2a42d4918bf87bf6bc54f379110c
|
F test/tkt-02a8e81d44.test 6c80d9c7514e2a42d4918bf87bf6bc54f379110c
|
||||||
F test/tkt-26ff0c2d1e.test 888324e751512972c6e0d1a09df740d8f5aaf660
|
F test/tkt-26ff0c2d1e.test 888324e751512972c6e0d1a09df740d8f5aaf660
|
||||||
@ -1408,7 +1408,7 @@ F tool/vdbe_profile.tcl 246d0da094856d72d2c12efec03250d71639d19f
|
|||||||
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
||||||
F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
|
F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
|
||||||
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
|
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
|
||||||
P 4f2bcff94c672312805be1400050a7026f93a9d7
|
P 4f7f355021f9eb048fffc84e559bfb3fdb1e1e69
|
||||||
R 029751c01b929451cff95b86da0868ac
|
R 17fe6dc83cb64fc6198b93af9ffea9ca
|
||||||
U drh
|
U dan
|
||||||
Z 7f6ec6c824be76681c81bd551b601799
|
Z de557aa3ec0a739d4121e9d650d8e092
|
||||||
|
@ -1 +1 @@
|
|||||||
4f7f355021f9eb048fffc84e559bfb3fdb1e1e69
|
9d2c62b04e3a9ac5d9adea2aac7ec3f3bc3e88bd
|
@ -189,8 +189,11 @@ static struct {
|
|||||||
int isInitialized;
|
int isInitialized;
|
||||||
|
|
||||||
/* For run-time access any of the other global data structures in this
|
/* For run-time access any of the other global data structures in this
|
||||||
** shim, the following mutex must be held.
|
** shim, the following mutex must be held. In practice, all this mutex
|
||||||
*/
|
** protects is add/remove operations to/from the linked list of group objects
|
||||||
|
** starting at pGroups below. More specifically, it protects the value of
|
||||||
|
** pGroups itself, and the pNext/pPrev fields of each multiplexGroup
|
||||||
|
** structure. */
|
||||||
sqlite3_mutex *pMutex;
|
sqlite3_mutex *pMutex;
|
||||||
|
|
||||||
/* List of multiplexGroup objects.
|
/* List of multiplexGroup objects.
|
||||||
@ -758,11 +761,8 @@ static int multiplexRead(
|
|||||||
multiplexConn *p = (multiplexConn*)pConn;
|
multiplexConn *p = (multiplexConn*)pConn;
|
||||||
multiplexGroup *pGroup = p->pGroup;
|
multiplexGroup *pGroup = p->pGroup;
|
||||||
int rc = SQLITE_OK;
|
int rc = SQLITE_OK;
|
||||||
int nMutex = 0;
|
|
||||||
multiplexEnter(); nMutex++;
|
|
||||||
if( !pGroup->bEnabled ){
|
if( !pGroup->bEnabled ){
|
||||||
sqlite3_file *pSubOpen = multiplexSubOpen(pGroup, 0, &rc, NULL, 0);
|
sqlite3_file *pSubOpen = multiplexSubOpen(pGroup, 0, &rc, NULL, 0);
|
||||||
multiplexLeave(); nMutex--;
|
|
||||||
if( pSubOpen==0 ){
|
if( pSubOpen==0 ){
|
||||||
rc = SQLITE_IOERR_READ;
|
rc = SQLITE_IOERR_READ;
|
||||||
}else{
|
}else{
|
||||||
@ -772,9 +772,7 @@ static int multiplexRead(
|
|||||||
while( iAmt > 0 ){
|
while( iAmt > 0 ){
|
||||||
int i = (int)(iOfst / pGroup->szChunk);
|
int i = (int)(iOfst / pGroup->szChunk);
|
||||||
sqlite3_file *pSubOpen;
|
sqlite3_file *pSubOpen;
|
||||||
if( nMutex==0 ){ multiplexEnter(); nMutex++; }
|
|
||||||
pSubOpen = multiplexSubOpen(pGroup, i, &rc, NULL, 1);
|
pSubOpen = multiplexSubOpen(pGroup, i, &rc, NULL, 1);
|
||||||
multiplexLeave(); nMutex--;
|
|
||||||
if( pSubOpen ){
|
if( pSubOpen ){
|
||||||
int extra = ((int)(iOfst % pGroup->szChunk) + iAmt) - pGroup->szChunk;
|
int extra = ((int)(iOfst % pGroup->szChunk) + iAmt) - pGroup->szChunk;
|
||||||
if( extra<0 ) extra = 0;
|
if( extra<0 ) extra = 0;
|
||||||
@ -791,8 +789,7 @@ static int multiplexRead(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
assert( nMutex==0 || nMutex==1 );
|
|
||||||
if( nMutex ) multiplexLeave();
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -809,7 +806,6 @@ static int multiplexWrite(
|
|||||||
multiplexConn *p = (multiplexConn*)pConn;
|
multiplexConn *p = (multiplexConn*)pConn;
|
||||||
multiplexGroup *pGroup = p->pGroup;
|
multiplexGroup *pGroup = p->pGroup;
|
||||||
int rc = SQLITE_OK;
|
int rc = SQLITE_OK;
|
||||||
multiplexEnter();
|
|
||||||
if( !pGroup->bEnabled ){
|
if( !pGroup->bEnabled ){
|
||||||
sqlite3_file *pSubOpen = multiplexSubOpen(pGroup, 0, &rc, NULL, 0);
|
sqlite3_file *pSubOpen = multiplexSubOpen(pGroup, 0, &rc, NULL, 0);
|
||||||
if( pSubOpen==0 ){
|
if( pSubOpen==0 ){
|
||||||
@ -834,7 +830,6 @@ static int multiplexWrite(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
multiplexLeave();
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -88,6 +88,8 @@
|
|||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
|
#include "test_multiplex.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This code implements the MD5 message-digest algorithm.
|
* This code implements the MD5 message-digest algorithm.
|
||||||
* The algorithm is due to Ron Rivest. This code was
|
* The algorithm is due to Ron Rivest. This code was
|
||||||
@ -1460,13 +1462,36 @@ int main(int argc, char **argv){
|
|||||||
argc = 2;
|
argc = 2;
|
||||||
argv = substArgv;
|
argv = substArgv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Loop through the command-line arguments to ensure that each argument
|
||||||
|
** selects at least one test. If not, assume there is a typo on the
|
||||||
|
** command-line and bail out with the usage message. */
|
||||||
for(iArg=1; iArg<argc; iArg++){
|
for(iArg=1; iArg<argc; iArg++){
|
||||||
|
const char *zArg = argv[iArg];
|
||||||
|
if( zArg[0]=='-' ){
|
||||||
|
if( sqlite3_stricmp(zArg, "-multiplexor")==0 ){
|
||||||
|
/* Install the multiplexor VFS as the default */
|
||||||
|
int rc = sqlite3_multiplex_initialize(0, 1);
|
||||||
|
if( rc!=SQLITE_OK ){
|
||||||
|
fprintf(stderr, "Failed to install multiplexor VFS (%d)\n", rc);
|
||||||
|
return 253;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
goto usage;
|
||||||
|
}
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
for(i=0; i<sizeof(aTest)/sizeof(aTest[0]); i++){
|
for(i=0; i<sizeof(aTest)/sizeof(aTest[0]); i++){
|
||||||
if( sqlite3_strglob(argv[iArg],aTest[i].zTest)==0 ) break;
|
if( sqlite3_strglob(zArg, aTest[i].zTest)==0 ) break;
|
||||||
}
|
}
|
||||||
if( i>=sizeof(aTest)/sizeof(aTest[0]) ) goto usage;
|
if( i>=sizeof(aTest)/sizeof(aTest[0]) ) goto usage;
|
||||||
}
|
}
|
||||||
|
|
||||||
for(iArg=1; iArg<argc; iArg++){
|
for(iArg=1; iArg<argc; iArg++){
|
||||||
|
if( argv[iArg][0]=='-' ) continue;
|
||||||
for(i=0; i<sizeof(aTest)/sizeof(aTest[0]); i++){
|
for(i=0; i<sizeof(aTest)/sizeof(aTest[0]); i++){
|
||||||
char const *z = aTest[i].zTest;
|
char const *z = aTest[i].zTest;
|
||||||
if( sqlite3_strglob(argv[iArg],z)==0 ){
|
if( sqlite3_strglob(argv[iArg],z)==0 ){
|
||||||
@ -1483,7 +1508,7 @@ int main(int argc, char **argv){
|
|||||||
return (nGlobalErr>0 ? 255 : 0);
|
return (nGlobalErr>0 ? 255 : 0);
|
||||||
|
|
||||||
usage:
|
usage:
|
||||||
printf("Usage: %s [testname|testprefix*]...\n", argv[0]);
|
printf("Usage: %s [-multiplexor] [testname|testprefix*]...\n", argv[0]);
|
||||||
printf("Available tests are:\n");
|
printf("Available tests are:\n");
|
||||||
for(i=0; i<sizeof(aTest)/sizeof(aTest[0]); i++){
|
for(i=0; i<sizeof(aTest)/sizeof(aTest[0]); i++){
|
||||||
printf(" %s\n", aTest[i].zTest);
|
printf(" %s\n", aTest[i].zTest);
|
||||||
|
Reference in New Issue
Block a user