[pypy-issue] Issue #2212: black -> white pointer in the GC (pypy/pypy)
issues-reply at bitbucket.org
Wed Dec 16 06:57:57 EST 2015
New issue 2212: black -> white pointer in the GC
It is possible to hit this assertion in our incremental GC:
ll_assert(False, "black -> white pointer found")
because of the JIT's rewrite.py, which will not put a write barrier before a ``setfield(p0, p1)`` if ``p1`` is an old constant. But p1 might be white and p0 black. I've no clue why the problem doesn't show up more often, but it triggers the assert above with the proper `PYPY_GC_*` env vars.
I think that it is not an important issue: in this case, the constant `p1` is also always reachable from the CompiledLoop itself. If we reach the assert in the GC, it's because the ``setfield`` was executed recently, during the same major collection iteration. The loop itself is alive during this iteration---running JIT assembler relies on the loop being alive. So we will anyway see the same ConstPtr from the loop.
Is the above reasoning correct? Am I missing an edge case?
More information about the pypy-issue