#1297: PackFile_Constant_unpack_pmc should call Parrot_thaw_constants(), not
Parrot_thaw()
----------------------+-----------------------------------------------------
Reporter: Infinoid | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: none | Version:
Severity: medium | Keywords:
Lang: | Patch:
Platform: |
----------------------+-----------------------------------------------------
Comment(by coke):
Originally reported in http://rt.perl.org/rt3/Ticket/Display.html?id=53754
Followup comment by chromatic.
{{{
Parrot_thaw() and whatever it calls to create new PMCs doesn't know to
allocate all GCable elements reachable from a constant PMC from constant
pools themselves.
Constant GCable elements get marked during the mark phase if and only if
they're reachable from the root set AND (most importantly) if there's a
path
through the graph to them that goes through a PMC that's not already
marked
as live for this mark phase.
Constant GCable elements never get their live flags flipped back to
unknown
during the sweep phase. They never get collected, so this is only a
problem
when...
... any non-constant GCable element reachable only from a constant PMC
will be
marked as live when its parent is first marked as live. The sweep phase
will
unmark the non-constant element. The next mark phase will *not* mark the
non-constant element as live (because its parent is still live), and the
subsequent sweep phase will collect that element...
''see backtrace''
... which is exactly what you see here.
}}}
--chromatic
--
Ticket URL: <https://trac.parrot.org/parrot/ticket/1297#comment:1>
Parrot <https://trac.parrot.org/parrot/>
Parrot Development
_______________________________________________
parrot-tickets mailing list
[email protected]
http://lists.parrot.org/mailman/listinfo/parrot-tickets