[py-svn] commit/pytest-xdist: hpk42: fix race condition as reported by Ralf Schmitt
Bitbucket
commits-noreply at bitbucket.org
Thu Apr 14 21:35:53 CEST 2011
1 new changeset in pytest-xdist:
http://bitbucket.org/hpk42/pytest-xdist/changeset/cafe8e5d645b/
changeset: r101:cafe8e5d645b
user: hpk42
date: 2011-04-14 21:35:27
summary: fix race condition as reported by Ralf Schmitt
affected #: 3 files (714 bytes)
--- a/CHANGELOG Wed Mar 16 17:59:14 2011 +0100
+++ b/CHANGELOG Thu Apr 14 21:35:27 2011 +0200
@@ -5,6 +5,9 @@
- fix issue34 - distributed testing with -p plugin now works correctly
+- fix race condition in looponfail mode where a concurrent file removal
+ could cause a crash
+
1.5
-------------------------
--- a/testing/test_looponfail.py Wed Mar 16 17:59:14 2011 +0100
+++ b/testing/test_looponfail.py Thu Apr 14 21:35:27 2011 +0200
@@ -14,11 +14,11 @@
changed = sd.check()
assert changed
- tmp.ensure("new.py")
+ p = tmp.ensure("new.py")
changed = sd.check()
assert changed
- tmp.join("new.py").remove()
+ p.remove()
changed = sd.check()
assert changed
@@ -36,6 +36,24 @@
changed = sd.check()
assert changed
+ def test_filechange_deletion_race(self, tmpdir, monkeypatch):
+ tmp = tmpdir
+ sd = StatRecorder([tmp])
+ changed = sd.check()
+ assert not changed
+
+ p = tmp.ensure("new.py")
+ changed = sd.check()
+ assert changed
+
+ p.remove()
+ # make check()'s visit() call return our just removed
+ # path as if we were in a race condition
+ monkeypatch.setattr(tmp, 'visit', lambda *args: [p])
+
+ changed = sd.check()
+ assert changed
+
def test_pycremoval(self, tmpdir):
tmp = tmpdir
hello = tmp.ensure("hello.py")
--- a/xdist/looponfail.py Wed Mar 16 17:59:14 2011 +0100
+++ b/xdist/looponfail.py Thu Apr 14 21:35:27 2011 +0200
@@ -201,14 +201,11 @@
newstat = {}
for rootdir in self.rootdirlist:
for path in rootdir.visit(self.fil, self.rec):
- oldstat = statcache.get(path, None)
- if oldstat is not None:
- del statcache[path]
+ oldstat = statcache.pop(path, None)
try:
newstat[path] = curstat = path.stat()
except py.error.ENOENT:
if oldstat:
- del statcache[path]
changed = True
else:
if oldstat:
Repository URL: https://bitbucket.org/hpk42/pytest-xdist/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
More information about the pytest-commit
mailing list