Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r47280:e0b2d986086d Date: 2011-09-16 09:29 +0200 http://bitbucket.org/pypy/pypy/changeset/e0b2d986086d/
Log: permute() should also ignore non-initialized continulets, just like switch(). diff --git a/lib_pypy/greenlet.py b/lib_pypy/greenlet.py --- a/lib_pypy/greenlet.py +++ b/lib_pypy/greenlet.py @@ -124,8 +124,7 @@ try: res = greenlet.run(*args) finally: - if greenlet.parent is not _tls.main: - _continuation.permute(greenlet, greenlet.parent) + _continuation.permute(greenlet, greenlet.parent) return (res,) def _greenlet_throw(greenlet, exc, value, tb): @@ -133,5 +132,4 @@ try: raise exc, value, tb finally: - if greenlet.parent is not _tls.main: - _continuation.permute(greenlet, greenlet.parent) + _continuation.permute(greenlet, greenlet.parent) diff --git a/pypy/module/_continuation/interp_continuation.py b/pypy/module/_continuation/interp_continuation.py --- a/pypy/module/_continuation/interp_continuation.py +++ b/pypy/module/_continuation/interp_continuation.py @@ -255,7 +255,7 @@ cont = space.interp_w(W_Continulet, w_cont) if cont.sthread is not sthread: if cont.sthread is None: - raise geterror(space, "got a non-initialized continulet") + continue # ignore non-initialized continulets else: raise geterror(space, "inter-thread support is missing") elif sthread.is_empty_handle(cont.h): diff --git a/pypy/module/_continuation/test/test_stacklet.py b/pypy/module/_continuation/test/test_stacklet.py --- a/pypy/module/_continuation/test/test_stacklet.py +++ b/pypy/module/_continuation/test/test_stacklet.py @@ -661,6 +661,12 @@ assert res == "done" main() + def test_permute_noninitialized(self): + from _continuation import continulet, permute + permute(continulet.__new__(continulet)) # ignored + permute(continulet.__new__(continulet), # ignored + continulet.__new__(continulet)) + def test_bug_finish_with_already_finished_stacklet(self): from _continuation import continulet, error # make an already-finished continulet _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit