annotate PCbuild/kill_python.c @ 46279:cc3333b7bd93

Merged revisions 62129,62131,62133 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r62129 | trent.nelson | 2008-04-03 19:27:06 +0100 (Thu, 03 Apr 2008) | 16 lines Reimplement kill_python. The existing version had a number of flaws, namely, it didn't work for x64 and it wasn't precise about which python_d.exe it was killing -- it just killed the first one it came across that happened to have 'pcbuild\python_d.exe' or 'build\python_d.exe' in it's path. The new version has been rewritten from the ground up and now lives in PCbuild, instead of Tools\buildbot, and it has also been incorporated into the Visual Studio solution (pcbuild.sln) as 'kill_python'. The solution has also been altered such that kill_python is called where necessary in the build process in order to prevent any linking errors due to open file locks. In lieu of this, all of the existing bits and pieces in Tools\buildbot that called out to kill_python at various points have also been removed as they are now obsolete. Tested on both Win32 and x64. Change set (included to improve usefulness of svnmerge log entry): M PCbuild\pythoncore.vcproj M PCbuild\pcbuild.sln M PCbuild\release.vsprops A PCbuild\kill_python.vcproj M PCbuild\debug.vsprops A PCbuild\kill_python.c D Tools\buildbot\kill_python.bat D Tools\buildbot\kill_python.mak M Tools\buildbot\build.bat D Tools\buildbot\Makefile M Tools\buildbot\build-amd64.bat M Tools\buildbot\buildmsi.bat D Tools\buildbot\kill_python.c ........ r62131 | trent.nelson | 2008-04-03 19:48:53 +0100 (Thu, 03 Apr 2008) | 1 line Add the correct OutputFile values for debug builds. Fixes r62129's commit. ........ r62133 | trent.nelson | 2008-04-03 21:00:08 +0100 (Thu, 03 Apr 2008) | 1 line Make kill_python a little more forgiving if it can't obtain a snapshot of module information for a given python[_d].exe process. Failing here was too pessimistic; the python[_d].exe process may be owned by another user, which is the case in some buildbot environments. ........
author Trent Nelson <trent.nelson@snakebite.org>
date Thu, 03 Apr 2008 20:47:30 +0000
parents
children f2e2d5b964de
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
46279
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
1 /*
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
2 * Helper program for killing lingering python[_d].exe processes before
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
3 * building, thus attempting to avoid build failures due to files being
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
4 * locked.
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
5 */
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
6
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
7 #include <windows.h>
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
8 #include <wchar.h>
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
9 #include <tlhelp32.h>
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
10 #include <stdio.h>
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
11
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
12 #pragma comment(lib, "psapi")
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
13
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
14 #ifdef _DEBUG
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
15 #define PYTHON_EXE (L"python_d.exe")
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
16 #define PYTHON_EXE_LEN (12)
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
17 #define KILL_PYTHON_EXE (L"kill_python_d.exe")
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
18 #define KILL_PYTHON_EXE_LEN (17)
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
19 #else
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
20 #define PYTHON_EXE (L"python.exe")
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
21 #define PYTHON_EXE_LEN (10)
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
22 #define KILL_PYTHON_EXE (L"kill_python.exe")
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
23 #define KILL_PYTHON_EXE_LEN (15)
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
24 #endif
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
25
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
26 int
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
27 main(int argc, char **argv)
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
28 {
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
29 HANDLE hp, hsp, hsm; /* process, snapshot processes, snapshot modules */
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
30 DWORD dac, our_pid;
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
31 size_t len;
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
32 wchar_t path[MAX_PATH+1];
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
33
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
34 MODULEENTRY32W me;
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
35 PROCESSENTRY32W pe;
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
36
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
37 me.dwSize = sizeof(MODULEENTRY32W);
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
38 pe.dwSize = sizeof(PROCESSENTRY32W);
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
39
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
40 memset(path, 0, MAX_PATH+1);
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
41
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
42 our_pid = GetCurrentProcessId();
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
43
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
44 hsm = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, our_pid);
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
45 if (hsm == INVALID_HANDLE_VALUE) {
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
46 printf("CreateToolhelp32Snapshot[1] failed: %d\n", GetLastError());
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
47 return 1;
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
48 }
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
49
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
50 if (!Module32FirstW(hsm, &me)) {
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
51 printf("Module32FirstW[1] failed: %d\n", GetLastError());
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
52 CloseHandle(hsm);
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
53 return 1;
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
54 }
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
55
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
56 /*
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
57 * Enumerate over the modules for the current process in order to find
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
58 * kill_process[_d].exe, then take a note of the directory it lives in.
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
59 */
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
60 do {
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
61 if (_wcsnicmp(me.szModule, KILL_PYTHON_EXE, KILL_PYTHON_EXE_LEN))
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
62 continue;
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
63
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
64 len = wcsnlen_s(me.szExePath, MAX_PATH) - KILL_PYTHON_EXE_LEN;
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
65 wcsncpy_s(path, MAX_PATH+1, me.szExePath, len);
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
66
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
67 break;
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
68
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
69 } while (Module32NextW(hsm, &me));
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
70
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
71 CloseHandle(hsm);
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
72
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
73 if (path == NULL) {
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
74 printf("failed to discern directory of running process\n");
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
75 return 1;
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
76 }
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
77
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
78 /*
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
79 * Take a snapshot of system processes. Enumerate over the snapshot,
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
80 * looking for python processes. When we find one, verify it lives
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
81 * in the same directory we live in. If it does, kill it. If we're
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
82 * unable to kill it, treat this as a fatal error and return 1.
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
83 *
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
84 * The rationale behind this is that we're called at the start of the
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
85 * build process on the basis that we'll take care of killing any
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
86 * running instances, such that the build won't encounter permission
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
87 * denied errors during linking. If we can't kill one of the processes,
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
88 * we can't provide this assurance, and the build shouldn't start.
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
89 */
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
90
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
91 hsp = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
92 if (hsp == INVALID_HANDLE_VALUE) {
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
93 printf("CreateToolhelp32Snapshot[2] failed: %d\n", GetLastError());
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
94 return 1;
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
95 }
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
96
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
97 if (!Process32FirstW(hsp, &pe)) {
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
98 printf("Process32FirstW failed: %d\n", GetLastError());
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
99 CloseHandle(hsp);
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
100 return 1;
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
101 }
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
102
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
103 dac = PROCESS_QUERY_INFORMATION | PROCESS_VM_READ | PROCESS_TERMINATE;
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
104 do {
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
105
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
106 /*
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
107 * XXX TODO: if we really wanted to be fancy, we could check the
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
108 * modules for all processes (not just the python[_d].exe ones)
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
109 * and see if any of our DLLs are loaded (i.e. python30[_d].dll),
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
110 * as that would also inhibit our ability to rebuild the solution.
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
111 * Not worth loosing sleep over though; for now, a simple check
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
112 * for just the python executable should be sufficient.
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
113 */
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
114
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
115 if (_wcsnicmp(pe.szExeFile, PYTHON_EXE, PYTHON_EXE_LEN))
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
116 /* This isn't a python process. */
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
117 continue;
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
118
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
119 /* It's a python process, so figure out which directory it's in... */
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
120 hsm = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pe.th32ProcessID);
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
121 if (hsm == INVALID_HANDLE_VALUE)
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
122 /*
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
123 * If our module snapshot fails (which will happen if we don't own
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
124 * the process), just ignore it and continue. (It seems different
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
125 * versions of Windows return different values for GetLastError()
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
126 * in this situation; it's easier to just ignore it and move on vs.
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
127 * stopping the build for what could be a false positive.)
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
128 */
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
129 continue;
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
130
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
131 if (!Module32FirstW(hsm, &me)) {
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
132 printf("Module32FirstW[2] failed: %d\n", GetLastError());
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
133 CloseHandle(hsp);
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
134 CloseHandle(hsm);
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
135 return 1;
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
136 }
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
137
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
138 do {
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
139 if (_wcsnicmp(me.szModule, PYTHON_EXE, PYTHON_EXE_LEN))
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
140 /* Wrong module, we're looking for python[_d].exe... */
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
141 continue;
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
142
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
143 if (_wcsnicmp(path, me.szExePath, len))
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
144 /* Process doesn't live in our directory. */
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
145 break;
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
146
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
147 /* Python process residing in the right directory, kill it! */
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
148 hp = OpenProcess(dac, FALSE, pe.th32ProcessID);
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
149 if (!hp) {
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
150 printf("OpenProcess failed: %d\n", GetLastError());
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
151 CloseHandle(hsp);
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
152 CloseHandle(hsm);
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
153 return 1;
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
154 }
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
155
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
156 if (!TerminateProcess(hp, 1)) {
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
157 printf("TerminateProcess failed: %d\n", GetLastError());
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
158 CloseHandle(hsp);
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
159 CloseHandle(hsm);
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
160 CloseHandle(hp);
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
161 return 1;
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
162 }
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
163
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
164 CloseHandle(hp);
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
165 break;
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
166
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
167 } while (Module32NextW(hsm, &me));
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
168
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
169 CloseHandle(hsm);
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
170
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
171 } while (Process32NextW(hsp, &pe));
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
172
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
173 CloseHandle(hsp);
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
174
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
175 return 0;
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
176 }
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
177
cc3333b7bd93 Merged revisions 62129,62131,62133 via svnmerge from
Trent Nelson <trent.nelson@snakebite.org>
parents:
diff changeset
178 /* vi: set ts=8 sw=4 sts=4 expandtab */