Mercurial > cpython-lru_cache-weakref
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 |
| 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 */ |
