Updates so that "threadtest3[.exe]" can be built for windows with MSVC.

FossilOrigin-Name: 4ce585fb07274284e3add6adcb66ed06e4b109584704d1ec7152bf43ca8d5d85
This commit is contained in:
dan 2021-07-19 16:49:13 +00:00
parent 73983658c9
commit bb2d2a50f9
5 changed files with 98 additions and 30 deletions

View File

@ -2586,6 +2586,17 @@ rbu.exe: $(TOP)\ext\rbu\rbu.c $(TOP)\ext\rbu\sqlite3rbu.c $(SQLITE3C) $(SQLITE3H
$(LTLINK) $(NO_WARN) -DSQLITE_ENABLE_RBU \
$(TOP)\ext\rbu\rbu.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
THREADTEST3_SRC = $(TOP)\test\threadtest3.c \
$(TOP)\test\tt3_checkpoint.c \
$(TOP)\test\tt3_index.c \
$(TOP)\test\tt3_vacuum.c \
$(TOP)\test\tt3_stress.c \
$(TOP)\test\tt3_lookaside1.c
threadtest3.exe: sqlite3.obj $(THREADTEST3_SRC) $(TOP)/src/test_multiplex.c
$(LTLINK) $(TOP)\test\threadtest3.c $(TOP)\src\test_multiplex.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
LSMDIR=$(TOP)\ext\lsm1
!INCLUDE $(LSMDIR)\Makefile.msc

View File

@ -1,11 +1,11 @@
C In\sdefensive\smode,\sallow\sstatements\sthat\swrite\sto\sshadow\stables\sto\sbe\sprepared\sfrom\swith\svirtual-table\sxSync()\scalls.
D 2021-07-19T14:00:29.519
C Updates\sso\sthat\s"threadtest3[.exe]"\scan\sbe\sbuilt\sfor\swindows\swith\sMSVC.
D 2021-07-19T16:49:13.643
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
F Makefile.in 83c348515cb62f6f2a2ddf3fd014113ff20564b776e1a614079722c88c6ff43d
F Makefile.linux-gcc f609543700659711fbd230eced1f01353117621dccae7b9fb70daa64236c5241
F Makefile.msc f889e0dcf8668cccac0c68be2ea09fc585dd40ac44ca37e9fb15638ee9315a92
F Makefile.msc be23161cf225f0574c34b866ade20824bef4e5473e924e0941fe954ccb253286
F README.md 27fb76aa7eb57ed63a53bbba7292b6bf71f51125554f79f16b5d040edd1e6110
F VERSION c6595fef606851f2bc3ebed6a7386c73751835fc909feab7c093739fa4b3c1d1
F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50
@ -1465,7 +1465,7 @@ F test/thread2.test f35d2106452b77523b3a2b7d1dcde2e5ee8f9e46
F test/thread_common.tcl 334639cadcb9f912bf82aa73f49efd5282e6cadd
F test/threadtest1.c 6029d9c5567db28e6dc908a0c63099c3ba6c383b
F test/threadtest2.c a70a8e94bef23339d34226eb9521015ef99f4df8
F test/threadtest3.c e63013af10cf236c7610eb06d33bde08c861806dc64be811940ff4d9ddd34a4f
F test/threadtest3.c fee869dba633f8403a7eef03bb038a3fc45f0814b9f829ea79a914fcc11f0218
F test/threadtest4.c c1e67136ceb6c7ec8184e56ac61db28f96bd2925
F test/threadtest5.c 9b4d782c58d8915d7e955ff8051f3d03628bda0d33b82971ea8c0f2f2808c421
F test/time-wordcount.sh 8e0b0f8109367827ad5d58f5cc849705731e4b90
@ -1639,7 +1639,7 @@ F test/triggerF.test 5d76f0a8c428ff87a4d5ed52da06f6096a2c787a1e21b846111dfac4123
F test/triggerG.test 2b816093c91ba73c733cfa8aedcc210ad819d72a98b1da30768a3c56505233e9
F test/triggerupfrom.test d1f9e56090408115c522bee626cc33a2f3370f627a5e341d832589d72e3aa271
F test/trustschema1.test 4e970aef0bfe0cee139703cc7209d0e0f07725d999b180ba50770f49edef1494
F test/tt3_checkpoint.c 9e75cf7c1c364f52e1c47fd0f14c4340a9db0fe1
F test/tt3_checkpoint.c ac7ca661d739280c89d9c253897df64a59a49369bd1247207ac0f655b622579d
F test/tt3_index.c 39eec10a35f57672225be4d182862152896dee4a
F test/tt3_lookaside1.c 0377e202c3c2a50d688cb65ba203afeda6fafeb9
F test/tt3_shared.c b37d22defc944a2ac4c91c927fd06c1d48cd51e2ce9d004fe868625bd2399f93
@ -1920,7 +1920,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 d78c272b3966cc1b12bc7e83fbe909a3c517d553a942d7f1c07bddf69f2e2164
R db28e0ca4ea83a622e82068e2a2a636b
P c8601d83fbecf84ca7991d339449b380deb5a7620dc84756a91c2880f030b423
R e7c3798c4e8afbc59f637b8a384b4003
U dan
Z 8b08dd57f21b0e772cbc6de26df5a8fe
Z 4507211c89102df26f9a64f266826b29

View File

@ -1 +1 @@
c8601d83fbecf84ca7991d339449b380deb5a7620dc84756a91c2880f030b423
4ce585fb07274284e3add6adcb66ed06e4b109584704d1ec7152bf43ca8d5d85

View File

@ -78,15 +78,31 @@
#include <sqlite3.h>
#include <unistd.h>
#include <stdio.h>
#include <pthread.h>
#include <assert.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <fcntl.h>
#include <errno.h>
#ifdef _WIN32
# include <stdio.h>
# include <string.h>
# include <assert.h>
# include <process.h>
# include <windows.h>
# include <sys/types.h>
# include <sys/stat.h>
# include <errno.h>
# include <fcntl.h>
# include <io.h>
#else
# include <unistd.h>
# include <stdio.h>
# include <pthread.h>
# include <assert.h>
# include <sys/types.h>
# include <sys/stat.h>
# include <string.h>
# include <fcntl.h>
# include <errno.h>
# define O_BINARY 0
#endif
#include "test_multiplex.h"
@ -436,8 +452,13 @@ struct Thread {
int iTid; /* Thread number within test */
void* pArg; /* Pointer argument passed by caller */
#ifdef _WIN32
uintptr_t winTid; /* Thread handle */
#else
pthread_t tid; /* Thread id */
#endif
char *(*xProc)(int, void*); /* Thread main proc */
char *zRes; /* Value returned by xProc */
Thread *pNext; /* Next in this list of threads */
};
@ -471,9 +492,13 @@ static void print_and_free_err(Error *p){
static void system_error(Error *pErr, int iSys){
pErr->rc = iSys;
#if _WIN32
pErr->zErr = sqlite3_mprintf("%s", strerror(iSys));
#else
pErr->zErr = (char *)sqlite3_malloc(512);
strerror_r(iSys, pErr->zErr, 512);
pErr->zErr[511] = '\0';
#endif
}
static void sqlite_error(
@ -512,7 +537,7 @@ static void clear_error_x(
}
static int busyhandler(void *pArg, int n){
usleep(10*1000);
sqlite3_sleep(10);
return 1;
}
@ -749,10 +774,20 @@ static void integrity_check_x(
}
}
#ifdef _WIN32
static unsigned __stdcall launch_thread_main(void *pArg){
Thread *p = (Thread *)pArg;
p->zRes = p->xProc(p->iTid, p->pArg);
_endthreadex(0);
return 0; /* NOT REACHED */
}
#else
static void *launch_thread_main(void *pArg){
Thread *p = (Thread *)pArg;
return (void *)p->xProc(p->iTid, p->pArg);
p->zRes = p->xProc(p->iTid, p->pArg);
return 0;
}
#endif
static void launch_thread_x(
Error *pErr, /* IN/OUT: Error code */
@ -771,7 +806,13 @@ static void launch_thread_x(
p->pArg = pArg;
p->xProc = xProc;
#ifdef _WIN32
rc = SQLITE_OK;
p->winTid = _beginthreadex(0, 0, launch_thread_main, (void*)p, 0, 0);
if( p->winTid==0 ) rc = errno ? errno : rc;
#else
rc = pthread_create(&p->tid, NULL, launch_thread_main, (void *)p);
#endif
if( rc!=0 ){
system_error(pErr, rc);
sqlite3_free(p);
@ -790,28 +831,44 @@ static void join_all_threads_x(
Thread *pNext;
for(p=pThreads->pThread; p; p=pNext){
void *ret;
pNext = p->pNext;
int rc;
pNext = p->pNext;
#ifdef _WIN32
do {
rc = WaitForSingleObjectEx((HANDLE)p->winTid, INFINITE, TRUE);
}while( rc==WAIT_IO_COMPLETION );
CloseHandle((HANDLE)p->winTid);
#else
rc = pthread_join(p->tid, &ret);
#endif
if( rc!=0 ){
if( pErr->rc==SQLITE_OK ) system_error(pErr, rc);
}else{
printf("Thread %d says: %s\n", p->iTid, (ret==0 ? "..." : (char *)ret));
printf("Thread %d says: %s\n", p->iTid, (p->zRes==0 ? "..." : p->zRes));
fflush(stdout);
}
sqlite3_free(p->zRes);
sqlite3_free(p);
}
pThreads->pThread = 0;
}
#ifdef _WIN32
# define THREADTEST3_STAT _stat
#else
# define THREADTEST3_STAT stat
#endif
static i64 filesize_x(
Error *pErr,
const char *zFile
){
i64 iRet = 0;
if( pErr->rc==SQLITE_OK ){
struct stat sStat;
if( stat(zFile, &sStat) ){
struct THREADTEST3_STAT sStat;
if( THREADTEST3_STAT(zFile, &sStat) ){
iRet = -1;
}else{
iRet = sStat.st_size;
@ -836,12 +893,12 @@ static void filecopy_x(
int fd2;
unlink(zTo);
fd1 = open(zFrom, O_RDONLY);
fd1 = open(zFrom, O_RDONLY|O_BINARY);
if( fd1<0 ){
system_error(pErr, errno);
return;
}
fd2 = open(zTo, O_RDWR|O_CREAT|O_EXCL, 0644);
fd2 = open(zTo, O_RDWR|O_CREAT|O_EXCL|O_BINARY, 0644);
if( fd2<0 ){
system_error(pErr, errno);
close(fd1);
@ -967,7 +1024,7 @@ static char *walthread1_ckpt_thread(int iTid, void *pArg){
opendb(&err, &db, "test.db", 0);
while( !timetostop(&err) ){
usleep(500*1000);
sqlite3_sleep(500);
execsql(&err, &db, "PRAGMA wal_checkpoint");
if( err.rc==SQLITE_OK ) nCkpt++;
clear_error(&err, SQLITE_BUSY);
@ -1415,7 +1472,7 @@ static void dynamic_triggers(int nMs){
launch_thread(&err, &threads, dynamic_triggers_2, 0);
launch_thread(&err, &threads, dynamic_triggers_2, 0);
sleep(2);
sqlite3_sleep(2*1000);
sqlite3_enable_shared_cache(0);
launch_thread(&err, &threads, dynamic_triggers_2, 0);

View File

@ -75,7 +75,7 @@ static char *checkpoint_starvation_reader(int iTid, void *pArg){
i64 iCount1, iCount2;
sql_script(&err, &db, "BEGIN");
iCount1 = execsql_i64(&err, &db, "SELECT count(x) FROM t1");
usleep(CHECKPOINT_STARVATION_READMS*1000);
sqlite3_sleep(CHECKPOINT_STARVATION_READMS);
iCount2 = execsql_i64(&err, &db, "SELECT count(x) FROM t1");
sql_script(&err, &db, "COMMIT");
@ -107,7 +107,7 @@ static void checkpoint_starvation_main(int nMs, CheckpointStarvationCtx *p){
for(i=0; i<4; i++){
launch_thread(&err, &threads, checkpoint_starvation_reader, 0);
usleep(CHECKPOINT_STARVATION_READMS*1000/4);
sqlite3_sleep(CHECKPOINT_STARVATION_READMS/4);
}
sqlite3_wal_hook(db.db, checkpoint_starvation_walhook, (void *)p);