From: "H.Yamamoto" Date: 2005-01-26T19:58:29+09:00 Subject: [ruby-dev:25546] Re: some problems on ext/tk/sample/**/*.rb 山本です。 >というわけで,件の個所で SEGV で落ちるということは, >Tcl_GetCurrentNamespace() の戻り値が元々不正アドレスを指しているか, >ip_null_namespace() の呼び出し以降のわずかな間に NULL に変化しているか >ということになりますよね? デバッガでレジスタを見た限りでは、NULL ではないようでした。また、 Tcl_Preserve を使っているので、この間に無効になるというのも 考えにくいと思います。 >お手数ですが,関数呼び出しのステップをさらに減らすために, > > if (!ip_null_namespace(ptr->ip) && Tcl_GetCommandInfo(ptr->ip, finalize_hook_name, &info)) { > >を > > fprintf(stderr, "Tcl_GetCurrentNamespece() == %lx\n", Tcl_GetCurrentNamespace(ptr->ip));fflush(stderr); > if (Tcl_GetCurrentNamespace(ptr->ip) != (Tcl_Namespace*)NULL && Tcl_GetCommandInfo(ptr->ip, finalize_hook_name, &info)) { > >にして試してみていただけないでしょうか. 残念ながら、だめでした。GetCurrentNamespace() の返値は非0でした。 >とりあえず,順序入れ替えとチェック増加を行ってみました. >これではいかがでしょうか? bcc32でコンパイルできなくなっているので試せませんでした。 ただ、自分でも順番を入れ替えたりしていて、落ちなくなったかと 思えば、さっきまで落ちなかったスクリプトが落ちるようになったりで、 個人的には、よくわからないまま順番を変えるのはよくない気がしてきました。 compiling tk MAKE Version 5.2 Copyright (c) 1987, 2000 Borland ..\..\miniruby.exe -I'../..' -I'../../../ruby/lib' -e "puts 'EXPORTS', ' Init_tkutil'" > tkutil-i386-bccwin32.def bcc32 -q -tWR -tWC -Od -v -w- -wsus -wcpt -wdup -wext -wrng -wrpt -wzdi -I. -I../.. -I../../../ruby -I../../../ruby/ext/tk -DHAVE_TCL_H -DHAVE_TK_H -I. -I../ruby/ -I../ruby/missing -DWITH_TCL_ENABLE_THREAD=0 -c ..\..\..\ruby\ext\tk\ tkutil.c ..\..\..\ruby\ext\tk\tkutil.c: ilink32 -q -Gn -v -Tpd c0d32.obj -L"../.." tkutil.obj, tkutil.so, nul, b ccwin32-ruby19.lib tk84.lib tcl84.lib cw32i.lib import32.lib ws2_32.lib , tcltkl ib-i386-bccwin32.def, Fatal: Could not open tcltklib-i386-bccwin32.def (error code 2) ** error 2 ** deleting tkutil.so ** error 1 ** deleting all