[MacRuby] #1085: Assertion failed: ((b->flags & flags) == flags)
#1085: Assertion failed: ((b->flags & flags) == flags) ----------------------------------+----------------------------------------- Reporter: watson1978@… | Owner: lsansonetti@… Type: defect | Status: new Priority: blocker | Milestone: Component: MacRuby | Keywords: ----------------------------------+----------------------------------------- Test Script: {{{ #!ruby require 'test/unit' class TestThreadGroup < Test::Unit::TestCase def test_frozen_thgroup thgrp = ThreadGroup.new t = Thread.new{1} Thread.new{ thgrp.add(Thread.current) thgrp.freeze assert_raise(ThreadError) do Thread.new{1}.join end assert_raise(ThreadError) do thgrp.add(t) end assert_raise(ThreadError) do ThreadGroup.new.add Thread.current end }.join t.join end end }}} BackTrace: {{{ Assertion failed: ((b->flags & flags) == flags), function rb_vm_prepare_block, file dispatcher.cpp, line 1379. Program received signal SIGABRT, Aborted. 0x00007fff883fdfca in __semwait_signal () (gdb) bt 20 #0 0x00007fff883fdfca in __semwait_signal () #1 0x00007fff883fde59 in nanosleep () #2 0x00000001000ed10a in thread_join_m (self=8592424160, sel=<value temporarily unavailable, due to optimizations>, argc=<value temporarily unavailable, due to optimizations>, argv=<value temporarily unavailable, due to optimizations>) at thread.c:191 #3 0x0000000100149f35 in rb_vm_dispatch (_vm=0x100d25050, cache=0x100cdc160, top=8592689248, self=8592424160, klass=0x2000a6ba0, sel=0x100df9400, block=0x0, opt=0 '\0', argc=0, argv=0x0) at dispatcher.cpp:448 #4 0x0000000102d5a7a6 in ?? () #5 0x0000000102d93117 in ?? () #6 0x000000010014a586 in rb_vm_dispatch (_vm=0x100d25050, cache=0x100ceb820, top=0, self=8592689248, klass=0x2002700e0, sel=0x10392bdc0, block=0x0, opt=2 '\002', argc=<value temporarily unavailable, due to optimizations>, argv=0x7fff5fbf9c18) at dispatcher.cpp:159 #7 0x0000000100101d9c in rb_f_send (recv=8592689248, sel=<value temporarily unavailable, due to optimizations>, argc=<value temporarily unavailable, due to optimizations>, argv=0x7fff5fbf9c10) at vm.h:602 #8 0x0000000100149f35 in rb_vm_dispatch (_vm=0x100d25050, cache=0x100cf08a0, top=8592689248, self=8592689248, klass=0x2002700e0, sel=0x100d28f50, block=0x0, opt=0 '\0', argc=1, argv=0x7fff5fbf9c10) at dispatcher.cpp:448 #9 0x0000000102d5a7a6 in ?? () #10 0x0000000102d91dd5 in ?? () #11 0x000000010014a56b in rb_vm_dispatch (_vm=0x100d25050, cache=0x100cd2488, top=8592497504, self=8592689248, klass=0x2002700e0, sel=0x7fff82cd76bb, block=0x0, opt=0 '\0', argc=<value temporarily unavailable, due to optimizations>, argv=0x7fff5fbfa9a0) at dispatcher.cpp:161 #12 0x0000000102d5a7a6 in ?? () #13 0x0000000102d914e7 in ?? () #14 0x000000010014ca67 in rb_vm_yield_args (_vm=0x100d25050, argc=<value temporarily unavailable, due to optimizations>, argv=0x2002700e0) at dispatcher.cpp:100 #15 0x00000001001011a8 in rb_yield (val=8592686688) at vm_eval.c:196 #16 0x000000010001531d in rary_each (ary=8592687840, sel=<value temporarily unavailable, due to optimizations>) at array.c:1065 #17 0x000000010014a586 in rb_vm_dispatch (_vm=0x100d25050, cache=0x100cca260, top=8592497504, self=8592687840, klass=0x200068020, sel=0x100d26450, block=0x20026f0a0, opt=0 '\0', argc=<value temporarily unavailable, due to optimizations>, argv=0x0) at dispatcher.cpp:159 #18 0x0000000102d5a7a6 in ?? () #19 0x0000000102d909df in ?? () (More stack frames follow...) }}} -- Ticket URL: <http://www.macruby.org/trac/ticket/1085> MacRuby <http://macruby.org/>
#1085: Assertion failed: ((b->flags & flags) == flags) ----------------------------------+----------------------------------------- Reporter: watson1978@… | Owner: lsansonetti@… Type: defect | Status: new Priority: blocker | Milestone: Component: MacRuby | Keywords: ----------------------------------+----------------------------------------- Comment(by watson1978@…): Apparently, when a condition of the "top_b->flags == 0 && b->parent_block" is formed, VM_BLOCK_THREAD seems to be need. {{{ #!diff diff --git a/dispatcher.cpp b/dispatcher.cpp index 5d0d07c..3a2c71b 100644 --- a/dispatcher.cpp +++ b/dispatcher.cpp @@ -1233,7 +1233,8 @@ rb_vm_yield_args(void *_vm, int argc, const VALUE *argv) top_b = GetThreadPtr(vm->get_thread())->body; } } - if (top_b != NULL && (top_b->flags & VM_BLOCK_THREAD)) { + if (top_b != NULL && + ((top_b->flags & VM_BLOCK_THREAD) || (top_b->flags == 0 && b->parent_block))) { b->flags |= VM_BLOCK_THREAD; } }}} -- Ticket URL: <http://www.macruby.org/trac/ticket/1085#comment:1> MacRuby <http://macruby.org/>
participants (1)
-
MacRuby