From: nobu.nakada@... Date: 2003-11-07T11:42:15+09:00 Subject: [ruby-dev:21865] Re: lib/test/unit/ui/tk/testrunner.rb なかだです。 At Fri, 7 Nov 2003 11:25:11 +0900, Hidetoshi NAGAI wrote: > 後は Tcl_DoOneEvent の再入制限くらいですかねぇ... > テスト用のパッチを作りますのでしばしお待ちを. スタックトレースによると、tclからコールバックされた(?)ip_ruby() からip_eval()が呼ばれて、再度tclを呼んで落ちているように見えま す。これが関係しているかどうか、分かりませんが。 #10 0x40633f54 in TclSetCmdNameObj () from /usr/lib/libtcl8.3.so #11 0x40633d63 in Tcl_GetCommandFromObj () from /usr/lib/libtcl8.3.so #12 0x4064e26b in TclExpandTokenArray () from /usr/lib/libtcl8.3.so #13 0x4064ec02 in Tcl_EvalEx () from /usr/lib/libtcl8.3.so #14 0x4064ef66 in Tcl_Eval () from /usr/lib/libtcl8.3.so #15 0x400c403a in ip_eval (self=1078876592, str=1078071452) at /home/nobu/src/ruby/1.8/ext/tcltklib/tcltklib.c:1782 #181 0x400c2d6d in ip_ruby (clientData=0x0, interp=0x8125188, argc=0, argv=0x0) at /home/nobu/src/ruby/1.8/ext/tcltklib/tcltklib.c:846 #182 0x4062f5b5 in TclExecuteByteCode () from /usr/lib/libtcl8.3.so #183 0x40613233 in Tcl_EvalObjEx () from /usr/lib/libtcl8.3.so #184 0x406556cb in TclObjInterpProc () from /usr/lib/libtcl8.3.so #185 0x4064e517 in TclExpandTokenArray () from /usr/lib/libtcl8.3.so #186 0x4064ec02 in Tcl_EvalEx () from /usr/lib/libtcl8.3.so #187 0x4065afad in Tcl_AfterObjCmd () from /usr/lib/libtcl8.3.so #188 0x4065a5e1 in Tcl_DeleteTimerHandler () from /usr/lib/libtcl8.3.so #189 0x4064c00d in Tcl_ServiceEvent () from /usr/lib/libtcl8.3.so #190 0x4064c335 in Tcl_DoOneEvent () from /usr/lib/libtcl8.3.so > @@ -832,10 +840,16 @@ > DUMP2("rb_eval_string(%s)", arg); > old_trapflg = rb_trap_immediate; > rb_trap_immediate = 0; > +#if defined(HAVE_LIBPTHREAD) && defined(USE_PTHREAD_EXTLIB) > + pthread_mutex_lock(&mtx_ip_ruby); > +#endif > res = rb_rescue2(rb_eval_string, (VALUE)arg, > ip_eval_rescue, (VALUE)&failed, > rb_eStandardError, rb_eScriptError, rb_eSystemExit, > (VALUE)0); > +#if defined(HAVE_LIBPTHREAD) && defined(USE_PTHREAD_EXTLIB) > + pthread_mutex_unlock(&mtx_ip_ruby); > +#endif > rb_trap_immediate = old_trapflg; それはそうと、このmutexの解放とrb_trap_immediateの復帰は rb_ensure()かrb_protect()を使わないとまずいような気がします。 -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦