[MacRuby] #1294: MacRuby crashes when loading files on the non-main thread

MacRuby ruby-noreply at macosforge.org
Mon Jul 11 16:45:15 PDT 2011


#1294: MacRuby crashes when loading files on the non-main thread
------------------------------------+---------------------------------------
 Reporter:  mrada@…                 |       Owner:  lsansonetti@…         
     Type:  defect                  |      Status:  new                   
 Priority:  blocker                 |   Milestone:                        
Component:  MacRuby                 |    Keywords:  reduction 0.11-blocker
------------------------------------+---------------------------------------

Comment(by watson1978@…):

 at least, it looks like it needs the exclusive control as following.

 {{{
 #!diff
 diff --git a/vm.cpp b/vm.cpp
 index 6023920..df76396 100644
 --- a/vm.cpp
 +++ b/vm.cpp
 @@ -795,6 +795,7 @@ extern "C"
  void *
  rb_vm_get_constant_cache(const char *name)
  {
 +    RoxorCoreLock lock;
      return GET_CORE()->constant_cache_get(rb_intern(name));
  }

 @@ -1543,8 +1544,10 @@ vm_alias_method(Class klass, Method method, ID
 name, bool noargs)
      SEL sel = rb_vm_id_to_sel(name, noargs ? 0 : 1);
      rb_vm_method_node_t *node = GET_CORE()->method_node_get(method);
      if (node != NULL) {
 +       GET_CORE()->lock();
         GET_CORE()->add_method(klass, sel, imp, node->ruby_imp,
                 node->arity, node->flags, types);
 +       GET_CORE()->unlock();
      }
      else {
         class_replaceMethod(klass, sel, imp, types);
 @@ -2180,8 +2183,10 @@ prepare_method:
             imp = (IMP)data;
         }
         assert(objc_imp_types != NULL);
 +       GET_CORE()->lock();
         GET_CORE()->resolve_method(klass, sel, NULL, arity, flags, imp, m,
                 objc_imp_types);
 +       GET_CORE()->unlock();
      }
      else {
  #if MACRUBY_STATIC
 }}}

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



More information about the macruby-tickets mailing list