[pypy-issue] Issue #2212: black -> white pointer in the GC (pypy/pypy)
Armin Rigo
issues-reply at bitbucket.org
Wed Dec 16 06:57:57 EST 2015
New issue 2212: black -> white pointer in the GC
https://bitbucket.org/pypy/pypy/issues/2212/black-white-pointer-in-the-gc
Armin Rigo:
It is possible to hit this assertion in our incremental GC:
```
#!python
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
mailing list