]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Enhance multi-process tester integration with the Win32 API.
authormistachkin <mistachkin@noemail.net>
Thu, 11 Apr 2013 00:09:44 +0000 (00:09 +0000)
committermistachkin <mistachkin@noemail.net>
Thu, 11 Apr 2013 00:09:44 +0000 (00:09 +0000)
FossilOrigin-Name: 0fdc743583c67a3a017b9ad812c62a5104b9aee7

manifest
manifest.uuid
mptest/mptest.c

index 1059d70fbc1a0bf611745f1c452596ff8919fa59..6d3e751585675d3dfeb0206227cabf65db50543b 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\snew\sprimary\serror\scodes\sSQLITE_NOTICE\sand\sSQLITE_WARNING\sfor\suse\swith\nsqlite3_log().\s\sAdd\snew\sextended\serror\scodes\sSQLITE_NOTICE_RECOVER_WAL\sand\nSQLITE_NOTICE_RECOVER_ROLLBACK\sto\suse\swith\ssqlite3_log()\smessages\sthat\soccur\non\seach\srecovery.
-D 2013-04-10T23:48:37.567
+C Enhance\smulti-process\stester\sintegration\swith\sthe\sWin32\sAPI.
+D 2013-04-11T00:09:44.820
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in 3dd3fcb87b70c78d99b2c8a03e44ec86d6ca9ce2
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -114,7 +114,7 @@ F mptest/config01.test 3f4ddeb152a4f83872f0fa7fcb48d9fd609893da
 F mptest/config02.test 962913ed2b537d60de4126db7fe54716865cdd22
 F mptest/crash01.test a5f31998ed48de8267d6620e8af107ec148e5f12
 F mptest/crash02.subtest f4ef05adcd15d60e5d2bd654204f2c008b519df8
-F mptest/mptest.c d5228be2db65634783b302423704b3928284adb5
+F mptest/mptest.c 8b6d7878addccbb9a1b28d9dbf2b0b516a3279f1
 F mptest/multiwrite01.test 81fbc17657964889b60750bd7bbb1deffe8f4d42
 F spec.template 86a4a43b99ebb3e75e6b9a735d5fd293a24e90ca
 F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b
@@ -1050,7 +1050,7 @@ F tool/vdbe-compress.tcl f12c884766bd14277f4fcedcae07078011717381
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
 F tool/win/sqlite.vsix 97894c2790eda7b5bce3cc79cb2a8ec2fde9b3ac
-P 41d6ff32a6dd1311dc3aabe5156335a64a886919
-R d4b63b2237f99e77bcb422f5c3bb48b3
-U drh
-Z 6b5c5fede4cd1a096bfdb2b852b5aff1
+P be7d2c5482c41baf000d7fb5dccc31b974e91064
+R 255ee63faf4906e3f01e118bd1c7af53
+U mistachkin
+Z 56dc3349791505b3e20ff09949e0bcd7
index 088566df4fa9959bca79805db99baa4b33c466bc..557333d3d0e7a47b9e120b2a5ccda3cbe902b570 100644 (file)
@@ -1 +1 @@
-be7d2c5482c41baf000d7fb5dccc31b974e91064
\ No newline at end of file
+0fdc743583c67a3a017b9ad812c62a5104b9aee7
\ No newline at end of file
index 6de32b0a05e1582369b704cc1d729b2a988e8606..0a8a8cedbdc66afbfb9eaa12c3136fd22c022ce7 100644 (file)
@@ -36,7 +36,8 @@
 #include "sqlite3.h"
 #include <stdio.h>
 #if defined(_WIN32)
-# include <process.h>
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
 #else
 # include <unistd.h>
 #endif
 #include <assert.h>
 #include <ctype.h>
 
+/* The suffix to append to the child command lines, if any */
+#if defined(_WIN32)
+# define CMDLINE_SUFFIX ""
+#else
+# define CMDLINE_SUFFIX "&"
+#endif
+
 /* Mark a parameter as unused to suppress compiler warnings */
 #define UNUSED_PARAMETER(x)  (void)x
 
@@ -617,39 +625,37 @@ static int finishScript(int iClient, int taskId, int bShutdown){
 static void startClient(int iClient){
   runSql("INSERT OR IGNORE INTO client VALUES(%d,0)", iClient);
   if( sqlite3_changes(g.db) ){
-#if !defined(_WIN32)
     char *zSys;
     int rc;
     zSys = sqlite3_mprintf(
-                 "%s \"%s\" --client %d --trace %d %s%s&",
+                 "%s \"%s\" --client %d --trace %d %s%s%s",
                  g.argv0, g.zDbFile, iClient, g.iTrace,
                  g.bSqlTrace ? "--sqltrace " : "",
-                 g.bSync ? "--sync " : ""
+                 g.bSync ? "--sync " : "",
+                 CMDLINE_SUFFIX
     );
+#if !defined(_WIN32)
     rc = system(zSys);
     if( rc ) errorMessage("system() fails with error code %d", rc);
-    sqlite3_free(zSys);
-#endif
-#if defined(_WIN32)
-    char *argv[10];
-    char zClient[20];
-    char zTrace[20];
-    argv[0] = g.argv0;
-    argv[1] = g.zDbFile;
-    argv[2] = "--client";
-    sqlite3_snprintf(sizeof(zClient),zClient,"%d",iClient);
-    argv[3] = zClient;
-    argv[4] = "--trace";
-    sqlite3_snprintf(sizeof(zTrace),zTrace,"%d",g.iTrace);
-    argv[5] = zTrace;
-    if( g.bSqlTrace ){
-      argv[6] = "--sqltrace";
-      argv[7] = 0;
-    }else{
-      argv[6] = 0;
+#else
+    {
+      STARTUPINFOA startupInfo;
+      PROCESS_INFORMATION processInfo;
+      memset(&startupInfo, 0, sizeof(startupInfo));
+      startupInfo.cb = sizeof(startupInfo);
+      memset(&processInfo, 0, sizeof(processInfo));
+      rc = CreateProcessA(NULL, zSys, NULL, NULL, FALSE, 0, NULL, NULL,
+                        &startupInfo, &processInfo);
+      if( rc ){
+        CloseHandle(processInfo.hThread);
+        CloseHandle(processInfo.hProcess);
+      }else{
+        errorMessage("CreateProcessA() fails with error code %lu",
+                     GetLastError());
+      }
     }
-    _spawnv(_P_NOWAIT, g.argv0, (const char*const*)argv);
 #endif
+    sqlite3_free(zSys);
   }
 }