From: mistachkin Date: Thu, 11 Apr 2013 00:09:44 +0000 (+0000) Subject: Enhance multi-process tester integration with the Win32 API. X-Git-Tag: version-3.7.17~90 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=08d418904a124936ff274240795a471cc6c1af77;p=thirdparty%2Fsqlite.git Enhance multi-process tester integration with the Win32 API. FossilOrigin-Name: 0fdc743583c67a3a017b9ad812c62a5104b9aee7 --- diff --git a/manifest b/manifest index 1059d70fbc..6d3e751585 100644 --- 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 diff --git a/manifest.uuid b/manifest.uuid index 088566df4f..557333d3d0 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -be7d2c5482c41baf000d7fb5dccc31b974e91064 \ No newline at end of file +0fdc743583c67a3a017b9ad812c62a5104b9aee7 \ No newline at end of file diff --git a/mptest/mptest.c b/mptest/mptest.c index 6de32b0a05..0a8a8cedbd 100644 --- a/mptest/mptest.c +++ b/mptest/mptest.c @@ -36,7 +36,8 @@ #include "sqlite3.h" #include #if defined(_WIN32) -# include +# define WIN32_LEAN_AND_MEAN +# include #else # include #endif @@ -45,6 +46,13 @@ #include #include +/* 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); } }