#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

Reply via email to