[pypy-commit] pypy cpyext-gc-support: Extra tests for the cases where the object pair dies before the first
arigo
noreply at buildbot.pypy.org
Fri Oct 16 14:17:40 EDT 2015
Author: Armin Rigo <arigo at tunes.org>
Branch: cpyext-gc-support
Changeset: r80292:c82b950212fd
Date: 2015-10-16 20:17 +0200
http://bitbucket.org/pypy/pypy/changeset/c82b950212fd/
Log: Extra tests for the cases where the object pair dies before the
first minor collection. The rules are that create_link_pypy()
always frees the PyPy object in this case; if tp_dealloc is called
later, it will be on a detached PyObject.
diff --git a/rpython/memory/gc/test/test_rawrefcount.py b/rpython/memory/gc/test/test_rawrefcount.py
--- a/rpython/memory/gc/test/test_rawrefcount.py
+++ b/rpython/memory/gc/test/test_rawrefcount.py
@@ -90,6 +90,16 @@
self.gc.check_no_more_rawrefcount_state()
assert self.dealloc == []
+ def test_rawrefcount_dies_quickly(self):
+ p1, p1ref, r1, r1addr, check_alive = (
+ self._rawrefcount_pair(42, is_direct=True))
+ check_alive(0)
+ self.gc.minor_collection()
+ py.test.raises(RuntimeError, "r1.ob_refcnt") # dead
+ py.test.raises(RuntimeError, "p1.x") # dead
+ self.gc.check_no_more_rawrefcount_state()
+ assert self.dealloc == []
+
def test_rawrefcount_objects_collection_survives_from_obj(self):
p1, p1ref, r1, r1addr, check_alive = (
self._rawrefcount_pair(42, is_direct=True))
@@ -151,3 +161,15 @@
assert self.dealloc == [r1addr]
self.gc.check_no_more_rawrefcount_state()
lltype.free(r1, flavor='raw')
+
+ def test_pypy_nondirect_dies_quickly(self):
+ p1, p1ref, r1, r1addr, check_alive = (
+ self._rawrefcount_pair(42, is_direct=False))
+ check_alive(0)
+ self.gc.minor_collection()
+ py.test.raises(RuntimeError, "p1.x") # dead
+ assert r1.ob_refcnt == 0
+ assert r1.ob_pypy_link == 0
+ assert self.dealloc == [r1addr]
+ self.gc.check_no_more_rawrefcount_state()
+ lltype.free(r1, flavor='raw')
More information about the pypy-commit
mailing list