[pypy-commit] pypy cpyext-gc-cycle: Fixed untracked objects in rawrefcount tests
stevie_92
pypy.commits at gmail.com
Fri May 17 03:18:48 EDT 2019
Author: Stefan Beyer <home at sbeyer.at>
Branch: cpyext-gc-cycle
Changeset: r96630:1c39776f6612
Date: 2019-05-16 17:09 +0200
http://bitbucket.org/pypy/pypy/changeset/1c39776f6612/
Log: Fixed untracked objects in rawrefcount tests
diff --git a/rpython/memory/gc/incminimark.py b/rpython/memory/gc/incminimark.py
--- a/rpython/memory/gc/incminimark.py
+++ b/rpython/memory/gc/incminimark.py
@@ -3448,11 +3448,11 @@
if use_cylicrefcnt:
pygchdr = self.rrc_pyobj_as_gc(pyobj)
if pygchdr != lltype.nullptr(self.PYOBJ_GC_HDR):
- #if pygchdr.c_gc_refs != self.RAWREFCOUNT_REFS_UNTRACKED:
- rc = pygchdr.c_gc_refs >> self.RAWREFCOUNT_REFS_SHIFT
- cyclic_rc = rc
- #else:
- # rc = pyobj.c_ob_refcnt
+ if pygchdr.c_gc_refs != self.RAWREFCOUNT_REFS_UNTRACKED:
+ rc = pygchdr.c_gc_refs >> self.RAWREFCOUNT_REFS_SHIFT
+ cyclic_rc = rc
+ else:
+ rc = pyobj.c_ob_refcnt
else:
rc = pyobj.c_ob_refcnt
else:
@@ -3595,18 +3595,18 @@
obj = llmemory.cast_int_to_adr(intobj)
gchdr = self.rrc_pyobj_as_gc(pyobj)
if gchdr <> lltype.nullptr(self.PYOBJ_GC_HDR):
- #if gchdr.c_gc_refs == self.RAWREFCOUNT_REFS_UNTRACKED:
- # debug_print("gc obj not tracked", gchdr, ": obj", obj)
- #else:
- refcnt = pyobj.c_ob_refcnt
- if refcnt >= REFCNT_FROM_PYPY_LIGHT:
- refcnt -= REFCNT_FROM_PYPY_LIGHT
- elif refcnt >= REFCNT_FROM_PYPY:
- refcnt -= REFCNT_FROM_PYPY
- if self.header(obj).tid & (GCFLAG_VISITED |
- GCFLAG_NO_HEAP_PTRS):
- refcnt += 1
- self._rrc_pyobj_gc_refcnt_set(gchdr, refcnt)
+ if gchdr.c_gc_refs == self.RAWREFCOUNT_REFS_UNTRACKED:
+ debug_print("gc obj not tracked", gchdr, ": obj", obj)
+ else:
+ refcnt = pyobj.c_ob_refcnt
+ if refcnt >= REFCNT_FROM_PYPY_LIGHT:
+ refcnt -= REFCNT_FROM_PYPY_LIGHT
+ elif refcnt >= REFCNT_FROM_PYPY:
+ refcnt -= REFCNT_FROM_PYPY
+ if self.header(obj).tid & (GCFLAG_VISITED |
+ GCFLAG_NO_HEAP_PTRS):
+ refcnt += 1
+ self._rrc_pyobj_gc_refcnt_set(gchdr, refcnt)
def _rrc_mark_rawrefcount(self):
if self._rrc_gc_list_is_empty(self.rrc_pyobj_list):
@@ -3779,8 +3779,9 @@
def _rrc_visit_action(self, pyobj, ignore):
pygchdr = self.rrc_pyobj_as_gc(pyobj)
if pygchdr <> lltype.nullptr(self.PYOBJ_GC_HDR):
- pygchdr.c_gc_refs += self.rrc_refcnt_add << \
- self.RAWREFCOUNT_REFS_SHIFT
+ if pygchdr.c_gc_refs != self.RAWREFCOUNT_REFS_UNTRACKED:
+ pygchdr.c_gc_refs += self.rrc_refcnt_add << \
+ self.RAWREFCOUNT_REFS_SHIFT
def _rrc_traverse(self, pyobj, refcnt_add):
from rpython.rlib.objectmodel import we_are_translated
diff --git a/rpython/memory/gc/test/dot/free_cpython_untracked_1.dot b/rpython/memory/gc/test/dot/free_cpython_untracked_1.dot
--- a/rpython/memory/gc/test/dot/free_cpython_untracked_1.dot
+++ b/rpython/memory/gc/test/dot/free_cpython_untracked_1.dot
@@ -1,8 +1,8 @@
digraph G {
"a" [type=C, alive=n];
- "b" [type=C, alive=n, tracked=n];
- "c" [type=C, alive=n];
+ "b" [type=C, alive=n];
+ "c" [type=C, alive=n, tracked=n];
"a" -> "b";
- "b" -> "c";
- "c" -> "a"
+ "b" -> "a";
+ "b" -> "c"
}
diff --git a/rpython/memory/gc/test/dot/keep_cpython_untracked_1.dot b/rpython/memory/gc/test/dot/keep_cpython_untracked_1.dot
--- a/rpython/memory/gc/test/dot/keep_cpython_untracked_1.dot
+++ b/rpython/memory/gc/test/dot/keep_cpython_untracked_1.dot
@@ -1,8 +1,8 @@
digraph G {
"a" [type=C, alive=y, ext_refcnt=1];
- "b" [type=C, alive=y, tracked=n];
- "c" [type=C, alive=y];
+ "b" [type=C, alive=y];
+ "c" [type=C, alive=y, tracked=n];
"a" -> "b";
+ "b" -> "a";
"b" -> "c";
- "c" -> "a";
}
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
@@ -660,9 +660,10 @@
finalize_modern(pyobj)
if pyobj.c_ob_refcnt == 0:
gchdr = self.gc.rrc_pyobj_as_gc(pyobj)
- next = gchdr.c_gc_next
- next.c_gc_prev = gchdr.c_gc_prev
- gchdr.c_gc_prev.c_gc_next = next
+ if gchdr.c_gc_refs != RAWREFCOUNT_REFS_UNTRACKED:
+ next = gchdr.c_gc_next
+ next.c_gc_prev = gchdr.c_gc_prev
+ gchdr.c_gc_prev.c_gc_next = next
decref_children(pyobj)
self.pyobjs[self.pyobjs.index(pyobj)] = \
lltype.nullptr(PYOBJ_HDR_PTR.TO)
More information about the pypy-commit
mailing list