[MacRuby] #1417: MacRuby crashes when invokes a rb_exit.
#1417: MacRuby crashes when invokes a rb_exit. ----------------------------------+----------------------------------------- Reporter: watson1978@… | Owner: lsansonetti@… Type: defect | Status: new Priority: blocker | Milestone: Component: MacRuby | Keywords: ----------------------------------+----------------------------------------- {{{ $ macruby -r test-mri/require_relative.rb test-mri/test/ruby/test_file.rb ---------------------------------------- Loaded suite test-mri/test/ruby/test_file Started .EE.......EEEEE....F.F. Finished in 0.600708 seconds. ----snip---- 23 tests, 84 assertions, 2 failures, 7 errors, 0 skips Test run options: --seed 38276 zsh: segmentation fault DYLD_LIBRARY_PATH=. macruby -r test- mri/require_relative.rb }}} Crash log: {{{ Process: macruby [81324] Path: /Library/Frameworks/MacRuby.framework/Versions/0.12/usr/bin/macruby Identifier: macruby Version: ??? (???) Code Type: X86-64 (Native) Parent Process: zsh [80904] Date/Time: 2011-11-14 19:58:23.260 +0900 OS Version: Mac OS X 10.7.2 (11C74) Report Version: 9 Crashed Thread: 0 Dispatch queue: com.apple.main-thread Exception Type: EXC_BAD_ACCESS (SIGSEGV) Exception Codes: 0x000000000000000d, 0x0000000000000000 VM Regions Near 0: --> __TEXT 000000010d37c000-000000010d37d000 [ 4K] r-x/rwx SM=COW /Library/Frameworks/MacRuby.framework/Versions/0.12/usr/bin/macruby Application Specific Information: objc[81324]: garbage collection is ON Thread 0 Crashed:: Dispatch queue: com.apple.main-thread 0 libmacruby.1.9.2.dylib 0x000000010d4b06e7 rb_ary_len + 7 (NSArray.m:1089) 1 libmacruby.1.9.2.dylib 0x000000010d49ad4d _ZL14call_finalizerP17rb_vm_finalizer_t + 29 (vm.cpp:4701) 2 libmacruby.1.9.2.dylib 0x000000010d49af48 rb_vm_finalize + 168 (vm.cpp:4726) 3 libmacruby.1.9.2.dylib 0x000000010d3aa0c3 ruby_finalize + 19 (eval.c:90) 4 libmacruby.1.9.2.dylib 0x000000010d4006b0 rb_exit + 16 (process.c:2456) 5 libmacruby.1.9.2.dylib 0x000000010d3fe067 rb_f_exit + 119 6 libmacruby.1.9.2.dylib 0x000000010d48cb59 rb_vm_dispatch + 3177 (dispatcher.cpp:448) 7 ??? 0x000000010f29b4a4 0 + 4549358756 8 ??? 0x000000010f2cf476 0 + 4549571702 9 libmacruby.1.9.2.dylib 0x000000010d490421 rb_vm_block_eval + 1489 (dispatcher.cpp:96) 10 libmacruby.1.9.2.dylib 0x000000010d49e290 rb_rescue2 + 96 (vm.cpp:3658) 11 libmacruby.1.9.2.dylib 0x000000010d3aa061 rb_exec_end_proc + 129 (eval_jump.c:68) 12 libmacruby.1.9.2.dylib 0x000000010d3aa0be ruby_finalize + 14 (eval.c:89) 13 libmacruby.1.9.2.dylib 0x000000010d4006b0 rb_exit + 16 (process.c:2456) 14 macruby 0x000000010d37cd1f main + 159 15 macruby 0x000000010d37cc74 start + 52 Thread 1: 0 libsystem_kernel.dylib 0x00007fff8dfda192 __workq_kernreturn + 10 1 libsystem_c.dylib 0x00007fff96f18594 _pthread_wqthread + 758 2 libsystem_c.dylib 0x00007fff96f19b85 start_wqthread + 13 Thread 2:: Dispatch queue: com.apple.libdispatch-manager 0 libsystem_kernel.dylib 0x00007fff8dfda7e6 kevent + 10 1 libdispatch.dylib 0x00007fff8dd475be _dispatch_mgr_invoke + 923 2 libdispatch.dylib 0x00007fff8dd4614e _dispatch_mgr_thread + 54 Thread 3: 0 libsystem_kernel.dylib 0x00007fff8dfda192 __workq_kernreturn + 10 1 libsystem_c.dylib 0x00007fff96f18594 _pthread_wqthread + 758 2 libsystem_c.dylib 0x00007fff96f19b85 start_wqthread + 13 Thread 4: 0 libsystem_kernel.dylib 0x00007fff8dfda192 __workq_kernreturn + 10 1 libsystem_c.dylib 0x00007fff96f18594 _pthread_wqthread + 758 2 libsystem_c.dylib 0x00007fff96f19b85 start_wqthread + 13 Thread 5: 0 libsystem_kernel.dylib 0x00007fff8dfda192 __workq_kernreturn + 10 1 libsystem_c.dylib 0x00007fff96f18594 _pthread_wqthread + 758 2 libsystem_c.dylib 0x00007fff96f19b85 start_wqthread + 13 Thread 6: 0 libsystem_kernel.dylib 0x00007fff8dfda192 __workq_kernreturn + 10 1 libsystem_c.dylib 0x00007fff96f18594 _pthread_wqthread + 758 2 libsystem_c.dylib 0x00007fff96f19b85 start_wqthread + 13 Thread 7: 0 libsystem_kernel.dylib 0x00007fff8dfda192 __workq_kernreturn + 10 1 libsystem_c.dylib 0x00007fff96f18594 _pthread_wqthread + 758 2 libsystem_c.dylib 0x00007fff96f19b85 start_wqthread + 13 Thread 8: 0 libsystem_kernel.dylib 0x00007fff8dfda192 __workq_kernreturn + 10 1 libsystem_c.dylib 0x00007fff96f18594 _pthread_wqthread + 758 2 libsystem_c.dylib 0x00007fff96f19b85 start_wqthread + 13 Thread 9: 0 libsystem_kernel.dylib 0x00007fff8dfda192 __workq_kernreturn + 10 1 libsystem_c.dylib 0x00007fff96f18594 _pthread_wqthread + 758 2 libsystem_c.dylib 0x00007fff96f19b85 start_wqthread + 13 Thread 10:: Dispatch queue: Garbage Collection Work Queue 0 libauto.dylib 0x00007fff926e0383 Auto::Zone::free_garbage(unsigned long, void**, unsigned long, void**, unsigned long&, unsigned long&) + 531 1 libauto.dylib 0x00007fff926cd837 auto_collect_internal(Auto::Zone*, unsigned int) + 551 2 libauto.dylib 0x00007fff926c921a __auto_zone_collect_block_invoke_0 + 74 3 libdispatch.dylib 0x00007fff8dd458ba _dispatch_call_block_and_release + 18 4 libdispatch.dylib 0x00007fff8dd4710a _dispatch_queue_drain + 264 5 libdispatch.dylib 0x00007fff8dd46f66 _dispatch_queue_invoke + 54 6 libdispatch.dylib 0x00007fff8dd46760 _dispatch_worker_thread2 + 198 7 libsystem_c.dylib 0x00007fff96f183da _pthread_wqthread + 316 8 libsystem_c.dylib 0x00007fff96f19b85 start_wqthread + 13 Thread 11: 0 libsystem_kernel.dylib 0x00007fff8dfda192 __workq_kernreturn + 10 1 libsystem_c.dylib 0x00007fff96f18594 _pthread_wqthread + 758 2 libsystem_c.dylib 0x00007fff96f19b85 start_wqthread + 13 Thread 12: 0 libsystem_kernel.dylib 0x00007fff8dfda192 __workq_kernreturn + 10 1 libsystem_c.dylib 0x00007fff96f18594 _pthread_wqthread + 758 2 libsystem_c.dylib 0x00007fff96f19b85 start_wqthread + 13 Thread 13: 0 libsystem_kernel.dylib 0x00007fff8dfda192 __workq_kernreturn + 10 1 libsystem_c.dylib 0x00007fff96f18594 _pthread_wqthread + 758 2 libsystem_c.dylib 0x00007fff96f19b85 start_wqthread + 13 Thread 0 crashed with X86 Thread State (64-bit): rax: 0x00000004007f41c0 rbx: 0x00007f84b6848754 rcx: 0x000000010e1398e0 rdx: 0x0000000400497300 rdi: 0xb68fe02000000080 rsi: 0x0000000000000000 rbp: 0x00007fff6cf79470 rsp: 0x00007fff6cf79460 r8: 0x00007f84b3806898 r9: 0x0000000400818480 r10: 0x00007f84b602a040 r11: 0x00000004007f4400 r12: 0x000000010e1398e0 r13: 0x0000000000000000 r14: 0x00007f84b7ce1928 r15: 0x00007fff6cf7a6e0 rip: 0x000000010d4b06e7 rfl: 0x0000000000010202 cr2: 0x0000000400817000 Logical CPU: 2 }}} -- Ticket URL: <http://www.macruby.org/trac/ticket/1417> MacRuby <http://macruby.org/>
#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/>
participants (1)
-
MacRuby