Index: tools/valgrind/browser_wrapper_win.py |
=================================================================== |
--- tools/valgrind/browser_wrapper_win.py (revision 113180) |
+++ tools/valgrind/browser_wrapper_win.py (working copy) |
@@ -2,6 +2,7 @@ |
# Use of this source code is governed by a BSD-style license that can be |
# found in the LICENSE file. |
+import glob |
import os |
import re |
import sys |
@@ -11,7 +12,6 @@ |
# support layout_tests, remove Dr. Memory specific code and verify it works |
# on a "clean" Mac. |
-wrapper_pid = os.getpid() |
testcase_name = None |
for arg in sys.argv: |
m = re.match("\-\-test\-name=(.*)", arg) |
@@ -29,11 +29,20 @@ |
# http://code.google.com/p/drmemory/issues/detail?id=684 fixed. |
logdir_idx = cmd_to_run.index("-logdir") |
old_logdir = cmd_to_run[logdir_idx + 1] |
-cmd_to_run[logdir_idx + 1] += "\\testcase.%d.logs" % wrapper_pid |
+ |
+wrapper_pid = str(os.getpid()) |
+ |
+# On Windows, there is a chance of PID collision. We avoid it by appending the |
+# number of entries in the logdir at the end of wrapper_pid. |
+# This number is monotonic and we can't have two simultaneously running wrappers |
+# with the same PID. |
+wrapper_pid += "_%d" % len(glob.glob(old_logdir + "\\*")) |
+ |
+cmd_to_run[logdir_idx + 1] += "\\testcase.%s.logs" % wrapper_pid |
os.makedirs(cmd_to_run[logdir_idx + 1]) |
if testcase_name: |
- f = open(old_logdir + "\\testcase.%d.name" % wrapper_pid, "w") |
+ f = open(old_logdir + "\\testcase.%s.name" % wrapper_pid, "w") |
print >>f, testcase_name |
f.close() |