[MacRuby] #505: ivars are not collected after they are re-assigned by an immediate value

MacRuby ruby-noreply at macosforge.org
Mon Jun 20 19:34:24 PDT 2011


#505: ivars are not collected after they are re-assigned by an immediate value
-----------------------------------+----------------------------------------
 Reporter:  lsansonetti@…          |        Owner:  lsansonetti@…        
     Type:  defect                 |       Status:  closed               
 Priority:  blocker                |    Milestone:                       
Component:  MacRuby                |   Resolution:  invalid              
 Keywords:                         |  
-----------------------------------+----------------------------------------
Changes (by lsansonetti@…):

  * keywords:  0.11-blocker =>
  * status:  new => closed
  * resolution:  => invalid
  * milestone:  MacRuby 1.0 =>


Comment:

 I believe the bug is a false positive, it turns out the reduction wasn't
 good.

 I double-checked what code the Objective-C compiler generates when
 assigning ivars to null, and it matches what we do.

 From http://www.opensource.apple.com/source/objc4/objc4-437/runtime/objc-
 auto.m:

 {{{
 __private_extern__ id objc_assign_ivar_gc(id value, id base, ptrdiff_t
 offset)
 {
     id *slot = (id*) ((char *)base + offset);

     if (value) {
         if (!auto_zone_set_write_barrier(gc_zone, (char *)base + offset,
 value)) {
             __private_extern__  void objc_assign_ivar_error(id base,
 ptrdiff_t offset);

             _objc_inform("GC: %p + %tu isn't in the auto_zone, break on
 objc_assign_ivar_error to debug.\n", base, offset);
             objc_assign_ivar_error(base, offset);
         }
     }
     else
         *slot = value;

     return value;
 }
 }}}

 (The write barrier is never emitted if value is null.)

 Also, I am able to reproduce a crash using this snippet:

 {{{
 ./miniruby -e "class X; def foo; @foo = 'hey'; ocid = @foo.object_id; @foo
 = nil; ocid; end; end; o=X.new; ocid=o.foo; 1.times { GC.start }; p
 ObjectSpace._id2ref(ocid)"
 Segmentation fault
 }}}

 Closing as invalid.

-- 
Ticket URL: <http://www.macruby.org/trac/ticket/505#comment:5>
MacRuby <http://macruby.org/>



More information about the macruby-tickets mailing list