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

MacRuby ruby-noreply at macosforge.org
Mon Jun 27 21:58:07 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 lsansonetti@…):

 Here is a full back trace of a crash running your snippet:

 {{{
 (gdb) thread apply all bt

 Thread 3 (process 25683):
 #0  0x00007fff8701d976 in Auto::Zone::block_start ()
 #1  0x00007fff8700aca6 in auto_zone_set_write_barrier ()
 #2  0x00007fff82772625 in objc_assign_strongCast_gc ()
 #3  0x00007fff88fa8bcf in __CFBasicHashRehash ()
 #4  0x00007fff88fb4ebd in __CFBasicHashAddValue ()
 #5  0x00007fff88fbc6b8 in CFBasicHashSetValue ()
 #6  0x00007fff88fbc4d7 in CFDictionarySetValue ()
 #7  0x000000010015ef91 in rb_intern_uchars (chars=0x10377eb10,
 chars_len=4, str=8590246688) at symbol.c:120
 #8  0x000000010015f2cd in rb_intern_str (str=8590246688) at symbol.c:130
 #9  0x0000000100079b04 in ruby_yyparse (parser=0x2000b0fe0) at
 parse.y:7655
 #10 0x000000010008d44a in yycompile0 (arg=<value temporarily unavailable,
 due to optimizations>, tracing=<value temporarily unavailable, due to
 optimizations>) at parse.y:5000
 #11 0x00000001000ad198 in load_file (parser=8590656832, fname=0x2000af040
 "/Library/Frameworks/MacRuby.framework/Versions/0.11/usr/lib/ruby/1.9.2/fileutils.rb",
 script=0, opt=0x10377f6f0) at ruby.c:1118
 #12 0x00000001000ad57c in rb_load_file (fname=0x2000af040
 "/Library/Frameworks/MacRuby.framework/Versions/0.11/usr/lib/ruby/1.9.2/fileutils.rb")
 at ruby.c:1135
 #13 0x0000000100155e59 in rb_vm_load (fname_str=0x2000af040
 "/Library/Frameworks/MacRuby.framework/Versions/0.11/usr/lib/ruby/1.9.2/fileutils.rb",
 wrap=<value temporarily unavailable, due to optimizations>) at vm.cpp:5602
 #14 0x00000001000362db in load_try (path=<value temporarily unavailable,
 due to optimizations>) at load.c:246
 #15 0x000000010015264a in rb_rescue2 (b_proc=<value temporarily
 unavailable, due to optimizations>, data1=<value temporarily unavailable,
 due to optimizations>, r_proc=0x100036230 <load_rescue>, data2=8590657088)
 at vm.cpp:3648
 #16 0x0000000100036a77 in rb_require_safe (fname=<value temporarily
 unavailable, due to optimizations>, safe=<value temporarily unavailable,
 due to optimizations>) at load.c:292
 #17 0x000000010013cfd9 in rb_vm_dispatch (_vm=0x103431c90,
 cache=0x102daa700, top=8590061504, self=8590061504, klass=0x20001ee00,
 sel=0x100e28de0, block=0x0, opt=2 '\002', argc=<value temporarily
 unavailable, due to optimizations>, argv=0x103780ab0) at
 dispatcher.cpp:161
 #18 0x0000000103200634 in ?? ()
 #19 0x0000000103200b4d in ?? ()
 #20 0x000000010013e109 in rb_vm_block_eval (b=0x103431c90, argc=<value
 temporarily unavailable, due to optimizations>, argv=0x20) at
 dispatcher.cpp:98
 #21 0x0000000100153cf8 in rb_vm_thread_run (thread=8590081824) at
 vm.cpp:4856
 #22 0x00007fff824684f6 in _pthread_start ()
 #23 0x00007fff824683a9 in thread_start ()

 Thread 2 (process 25683):
 #0  0x00007fff870165a6 in Auto::WriteBarrier::range_has_marked_cards ()
 #1  0x00007fff87029944 in
 Auto::MemoryScanner::scan_retained_and_old_blocks ()
 #2  0x00007fff87024a47 in Auto::Collector::check_roots ()
 #3  0x00007fff870298b1 in Auto::MemoryScanner::scan ()
 #4  0x00007fff8701e77d in Auto::Zone::collect ()
 #5  0x00007fff87007a7e in auto_collect_internal ()
 #6  0x00007fff870080bd in auto_collection_work ()
 #7  0x00007fff8246b284 in _dispatch_call_block_and_release ()
 #8  0x00007fff82449df2 in _dispatch_queue_drain ()
 #9  0x00007fff82449c54 in _dispatch_queue_invoke ()
 #10 0x00007fff824497fe in _dispatch_worker_thread2 ()
 #11 0x00007fff82449128 in _pthread_wqthread ()
 #12 0x00007fff82448fc5 in start_wqthread ()

 Thread 1 (process 25683):
 #0  0x00007fff824471f0 in strlcat ()
 #1  0x000000010006d1e5 in named_arg_gen (parser=0x2000b1520, id=12968,
 init=1) at parse.y:8896
 #2  0x000000010007d8b2 in ruby_yyparse (parser=<value temporarily
 unavailable, due to optimizations>) at parse.y:3017
 #3  0x000000010008d44a in yycompile0 (arg=<value temporarily unavailable,
 due to optimizations>, tracing=<value temporarily unavailable, due to
 optimizations>) at parse.y:5000
 #4  0x00000001000ad198 in load_file (parser=8590659296, fname=0x2000afc80
 "/Library/Frameworks/MacRuby.framework/Versions/0.11/usr/lib/ruby/1.9.2/fileutils.rb",
 script=0, opt=0x7fff5fbfe520) at ruby.c:1118
 #5  0x00000001000ad57c in rb_load_file (fname=0x2000afc80
 "/Library/Frameworks/MacRuby.framework/Versions/0.11/usr/lib/ruby/1.9.2/fileutils.rb")
 at ruby.c:1135
 #6  0x0000000100155e59 in rb_vm_load (fname_str=0x2000afc80
 "/Library/Frameworks/MacRuby.framework/Versions/0.11/usr/lib/ruby/1.9.2/fileutils.rb",
 wrap=<value temporarily unavailable, due to optimizations>) at vm.cpp:5602
 #7  0x00000001000362db in load_try (path=<value temporarily unavailable,
 due to optimizations>) at load.c:246
 #8  0x000000010015264a in rb_rescue2 (b_proc=<value temporarily
 unavailable, due to optimizations>, data1=<value temporarily unavailable,
 due to optimizations>, r_proc=0x100036230 <load_rescue>, data2=8590024064)
 at vm.cpp:3648
 #9  0x0000000100036a77 in rb_require_safe (fname=<value temporarily
 unavailable, due to optimizations>, safe=<value temporarily unavailable,
 due to optimizations>) at load.c:292
 #10 0x000000010013cfd9 in rb_vm_dispatch (_vm=0x100e230c0,
 cache=0x102000700, top=8590061504, self=8590061504, klass=0x20001ee00,
 sel=0x100e28de0, block=0x0, opt=2 '\002', argc=<value temporarily
 unavailable, due to optimizations>, argv=0x7fff5fbff908) at
 dispatcher.cpp:161
 #11 0x0000000103200634 in ?? ()
 #12 0x0000000103200162 in ?? ()
 #13 0x0000000100155b36 in rb_vm_run (fname=0x2000a89a0 "t.rb",
 node=0x2000239a0, binding=<value temporarily unavailable, due to
 optimizations>, inside_eval=<value temporarily unavailable, due to
 optimizations>) at vm.cpp:4115
 #14 0x000000010002dd20 in ruby_run_node (n=0x2000239a0) at eval.c:211
 #15 0x00000001000e9ce8 in main (argc=2, argv=0x100e1bf50, envp=<value
 temporarily unavailable, due to optimizations>) at main.cpp:40
 (gdb)
 }}}

 It seems to call into parse.y functions concurrently, however the parser
 is not thread-safe. We need to secure access to it.

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



More information about the macruby-tickets mailing list