トップ «前の日(12-14) 最新 次の日(12-16)» 追記

Orz日記 by Akio Morita

ToDo:

  • 15 SAD Fit[]回りの障害事例の解析
  • 10 smart pointer版PEGクラスの再実装(Left Recursionまわり)
2006|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|06|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|07|08|09|10|11|12|
2013|01|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|06|07|08|10|12|
2016|01|02|03|05|06|08|10|11|
2017|01|02|03|04|05|06|07|09|10|11|12|
2018|01|02|03|04|06|07|08|09|10|11|12|
2019|01|03|04|05|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|

2006-12-15

_ [雑記]メモリー交換

筑波大付属病院での用事を済ませてから、 午後はCPU/メモリー/マザーの3点セットを サポートに持ち込んで検証してもらった

結局、メモリー2枚を代品交換、週末はまたもやmemtest86である

帰りに、オリオスペックによって外付けMultilaneエンクロージャを購入


2017-12-15

_ [SAD]tfefundef crash

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の評価が成功している)を要求しているのも謎なので要解析

_ [SAD][EPICS]TkinterのDynamic Loading対応について

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が起動される

必要なものをまとめると

  • =eca_initからSAD/Tkinter.soのロードを要求する=src/sim/sad_tcltk.cからロードを要求する
    • ロード済みか判定する手続きが必要
    • =feature_requireするのが簡単?=src/sim/sad_tcltk.c内ならポインタテーブルの初期化状態で判定出来る
      • Tkinter.soでfeature_provideしておく
  • Tkinter.so内のTclCreateInterpが使うsadXlib_SetNewDisplayホックのバックエンドがSAD/Xlib.so'内にあるので、必要ならこれもchain loadする必要がある
    • =依存性のメカニズムは、Tkinter.soのケースと同じで良い=src/sim/sad_xlib.c側でロード処理を行う

_ [SAD][FreeBSD]SADのSocketサポートとipv6_ipv4mappingについて

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のサポートは後方互換性を破壊しないので実装すべきである

影響範囲

  • SADInspect
    • TCPOpen[0]で得たSocketをTCPAccept[]でBlocking Waitしている
  • Network/StreamIO library
    • StreamServerでの待受ポートの作成時 TCPOpen[Port]形式を使っている
    • Server Socketと TkCreateFileHandlerに登録している
    • Server Socketを他の接続Socketと共にPollUnitする際にPrepend[]で繋げている
    • SuperKEKBの運転に影響が出る

Network/StreamIO libraryに関しては、早急に対策が必要

  • Server Socketを生成する部分を生のTCPOpenをラップしたHelper関数を用意する
    • Helper関数内で複数回TCPOpenして全てのプロトコルのSocketを生成する
  • Server Socket変数をSocketのリストとして取り扱う様に改訂する
    • PollUnitの結果からFirst/Restを取る操作を行っているので、可変長にする必要がある

2023-12-15

_ [雑記]電子レンジ壊れた

TWINBIRDの単機能な奴だが、前から一部不調だった操作ボタンがまったく反応しなくなった。10年持たないとは軟弱な!

前の奴は、大学進学時に下宿するとき大学生協で購入したもので、大学院出て就職してからも動きつづけたタフな奴。 さすがに宿舎廃止で引っ越すとき移動させようとしたら、足がもげたので今日壊れた奴に買い換えたのだが、やはり白物家電の品質下がっているのかなぁ?


カテゴリー: Admin | Emacs | EPICS | Fortran | FreeBSD | GCC | hgsubversion | IPv6 | KEKB | LHC | Lisp | LLVM | MADX | Ryzen | SAD | samba | tDiary | unix | WWW | YaSAI | お仕事 | イベント | 出張 | 宴会 | 数学 | 艦これ | 買いもの | 追記 | 雑記