-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
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
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
#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
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);
}
}