ToDo:
tfefundef@src/tfefun.f冒頭のget_func_id(ia1)にて、SEGVするケースを発見した
irtc=0 narg=isp-isp1 it1=itastk(1,isp1) ia1=itastk(2,isp1) 1 if(it1 .eq. ntfoper)then if(ia1 .gt. mtfend .and. get_func_id(ia1) .ge. 1000)then call tfefunref(isp1,itx,iax,vx,.true.,irtc) if(irtc .eq. 0 .and. $ itx .eq. ntfreal .and. iax .ne. 0)then call tfclrtparaed else if(irtc .eq. 0)then irtc=itfmessageexp(999,'General::invset',it1,ia1,0.d0) endif endif go to 6900 elseif(ia1 .eq. mtfatt)then call tfatt(isp1,itx,iax,vx,.false.,irtc) go to 6900 else
発生ケースでは、it1が ntfoperにも関わらず ia1が無効なポイントをさしている。 ただし、itastk(2, isp1)は健全な状態で、後続のコードでit1がntfsymbolのケースで、Symbolの参照先がOperatorになっている場合にitastk(*, isp1)とit1を書き換えて、go to 1で再帰するケースで発生する
また、当該コードで、call tfclrtparaedに達するケースは、LINE(tfline)がパラメータブロックの参照をiax経由で返してくる場合で、LINE[...] = valの代入式の左辺値評価を行うケースに相当する。従って、tfefunrefを呼び出す事前条件はもう少し限定出来ると思われる(左辺値参照の伝搬を制限するケースでは、isp1にLINEが来ていないケースの評価が省略できるはず…)
ifブロック内で、General::invsetを返す条件に irtc == 0(tffunrefの評価が成功している)を要求しているのも謎なので要解析
Tk_CreateFileHandler wrapperに関して、Tkinterのloading前に登録手続きのQeueingサポートを必要と考えていたが、Tcl/Tkのインタプリタインスタンスの生成(Packages/TkinterCore.n)と関係なくlibtkがバインドされていれば十分であることが分かった。
従って、バックエンドモジュールであるSAD/Tkinter.soがロード済みで有れば十分である。
builtinの場合を考えると、sadDefFunc_EPICSCA時点ではLibrary@Requireは要求出来ないので、SADScriptインタープリタからの関数評価で初期化シングルトンeca_initが走ったタイミングで、必要なbackend moduleを要求すれば良い
実際に、ポーリングを走らせる段階ではTkWait/TkSenseを評価したタイミングで、Packages/Tkinter.nがロードされTkイベントループ内からTkinter backendに登録済みの eca_fd_callbackが起動される
必要なものをまとめると
CPUS lpqの件で取り上げたnet.inet6.ip6.v6only sysctl変数であるが、net.inet6.ip6.v6only=1(ipv6_ipv4mapping="NO")な運用下では、TCPOpen[0]で生成するServer Side TCP SocketがIPv6専用となり、IPv4で接続してくるクライアントからの接続を受けられなくなる。
TCPOpen[0]が返すポート番号で再度TCPOpen[port]を実行すると、TCP/IPv4ポートが空いていれば割り当てる事が出来る。
ただし、現行のTCPAcceptは単一のSocketのみを受け付けるので、SelectUnit/PollでIPv6/IPv4ソケットを待ち、要求が有ったソケットからTCPAcceptするという処理が必要となる
TCPOpen・TCPAcceptに手を加えて、プロトコル毎のソケットをリストで返す案もあるが、TCPOpen[0]が返すソケットをそのままSelectUnit/Pollに流し込むコードで後方互換性が破壊される。 また、TCPAcceptでBlocking Waitさせるケースでは、TCPAccept内部でselect/pollでBlockingさせることが必要となり面倒が増える
TCPAcceptによるSocket Listのサポートは後方互換性を破壊しないので実装すべきである
Network/StreamIO libraryに関しては、早急に対策が必要
カテゴリー: Admin | Emacs | EPICS | Fortran | FreeBSD | GCC | hgsubversion | IPv6 | KEKB | LHC | Lisp | LLVM | MADX | Ryzen | SAD | samba | tDiary | unix | WWW | YaSAI | お仕事 | イベント | 出張 | 宴会 | 数学 | 艦これ | 買いもの | 追記 | 雑記