]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Updates so that "threadtest3[.exe]" can be built for windows with MSVC.
authordan <Dan Kennedy>
Mon, 19 Jul 2021 16:49:13 +0000 (16:49 +0000)
committerdan <Dan Kennedy>
Mon, 19 Jul 2021 16:49:13 +0000 (16:49 +0000)
FossilOrigin-Name: 4ce585fb07274284e3add6adcb66ed06e4b109584704d1ec7152bf43ca8d5d85

Makefile.msc
manifest
manifest.uuid
test/threadtest3.c
test/tt3_checkpoint.c

index b1b4e22cd6c162e70e24d20c613cb9ac640586e1..57ddbe78549f7670829ee12d4f4b83e5b97c0a36 100644 (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
 
index c4eeee5ecd3cdbe6f19820e7edd314f4af9039f8..c28c4a866711961aef6154bdc1cbf7734c6435b6 100644 (file)
--- a/manifest
+++ b/manifest
@@ -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
index 7e93b98bd8fd7138961191dbdd08a8f382a8061b..77230210639a5c5f666ed94dc303294527b4176e 100644 (file)
@@ -1 +1 @@
-c8601d83fbecf84ca7991d339449b380deb5a7620dc84756a91c2880f030b423
\ No newline at end of file
+4ce585fb07274284e3add6adcb66ed06e4b109584704d1ec7152bf43ca8d5d85
\ No newline at end of file
index 41c0fb9ac69a254d6037504f93d5c1ecd34c7462..f427324a23a135d2365eac54df4cf6d6fb146231 100644 (file)
 
 
 #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);
index 060a698211a1f084130385d09856d81467ef4900..ec9d0727e6f39e0c76db13a3ba38e8446af7ab08 100644 (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);