[MacRuby] #1417: MacRuby crashes when invokes a rb_exit.

MacRuby ruby-noreply at macosforge.org
Mon Nov 14 03:08:14 PST 2011


#1417: MacRuby crashes when invokes a rb_exit.
----------------------------------+-----------------------------------------
 Reporter:  watson1978@…          |       Owner:  lsansonetti@…        
     Type:  defect                |      Status:  new                  
 Priority:  blocker               |   Milestone:                       
Component:  MacRuby               |    Keywords:                       
----------------------------------+-----------------------------------------

Comment(by watson1978@…):

 it seems to crash when invoke the rb_exit's finalizer and GC's finalizer
 at same times.

 When disable GC at rb_exit, it seems to run fine.

 {{{
 diff --git a/eval.c b/eval.c
 index 3ff9db7..7797b9a 100644
 --- a/eval.c
 +++ b/eval.c
 @@ -94,6 +94,7 @@ ruby_finalize_1(void)
  void
  ruby_finalize(void)
  {
 +    GC_DISABLE();
      ruby_finalize_0();
      ruby_finalize_1();
  }
 diff --git a/macruby_internal.h b/macruby_internal.h
 index d088e9e..8ac08e2 100644
 --- a/macruby_internal.h
 +++ b/macruby_internal.h
 @@ -33,6 +33,7 @@ void auto_zone_retain(void *zone, void *ptr);
  unsigned int auto_zone_release(void *zone, void *ptr);
  unsigned int auto_zone_retain_count(void *zone, const void *ptr);
  void *auto_zone_write_barrier_memmove(void *zone, void *dst, const void
 *src, size_t size);
 +void auto_collector_disable(void *zone);
  extern void *__auto_zone;
  #else
  extern auto_zone_t *__auto_zone;
 @@ -89,6 +90,8 @@ rb_objc_release(void *addr)
  }
  #define GC_RELEASE(obj) (rb_objc_release((void *)obj))

 +#define GC_DISABLE() (auto_collector_disable(__auto_zone))
 +
  // MacRubyIntern.h

  /* object.c */
 }}}

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



More information about the macruby-tickets mailing list