[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[FDclone-users:00946] Re: ツリーで移動中にSEGV



 しらいです。

In Message-Id <20120309090245.9684587C001@yuka.unixusers.net>
        Takashi SHIRAI <shirai@unixusers.net>writes:
>  しらいです。

>  尚 release 時期に関してですが、一年以上も溜め込んでいただ
> けに他にも幾つか未発表の bug fix を含んでいます。そのため、
> platform 別の検証に幾分時間がかかると思います。
>  折角環境を用意したので MS-DOS 版でもじっくりと検証を行ない
> たいところですが、これがまた遅くて往生しております。VM 上に
> しかない MINIX も結構な遅さです。

 各 platform 上で鋭意検証中ですが、意外な伏兵に阻まれ頓挫中
です。面倒な事情としては MS-DOS や MINIX に近い環境だと思い
ますが、Cygwin がまた色々やらかしてくれてるようです。

 そもそも Cygwin は version 管理が全然なので、ある version
で動くようにすると別の version で動かなくなるばかりか、じゃ
あ version に合わせようにも判別不能という始末でして。
 黙ってころころと仕様を変えてくるので、アプリ開発者にとって
は非常に迷惑な存在だと思います。継承性とか互換性とか全然眼中
にないんじゃないでしょうか。
 せめて compile 時なり実行時なりに version 判定出来れば、動
的に対応可能なのですが、現状では release 時の最新版でしか動
かない code になってしまいます。

 確かに FD-3.00j の release 時には動いていたのですが、その
後の version up により、現在の最新版 1.7.11 では幾分支障があ
るようです。

1.tcsetpgrp() が freeze する。

 これはどうも bug っぽいのですが、特定の条件で tcsetpgrp()
が一切応答しなくなってしまうようになりました。system call な
ので回避が難しいのですが signal を block して何とかしました。

 多分 1.7.9 辺りで仕込まれた支障だと思います。


2.子 process に制御端末を渡せない。

 その tcsetpgrp() は正に制御端末を渡す関数なのですが、何故
かうまく渡らないようで、less のように raw device として扱う
と SIGTTOU で中断してしまいます。
 標準 shell の bash ではうまいことやりくりしているので、回
避策はあるのだと思いますが、Cygwin 用 bash の source code 見
てもそれらしい記述は見つけられませんでした。
 仕方ないので、.fd2rc 辺りに「set +m」と記述して job 制御を
無効化して使うしかなさそうですね。^Z で suspend すると二度と
foreground に戻せなくなるのでご注意下さい。

 これも多分 1.7.9 辺りで仕込まれた支障です。


3.端末仕様が大きく変更。

 1.7.11 辺りで「Cygwin Terminal」なる専用端末が同梱されるよ
うになったのですが、そのせいかそれ以外の端末仕様も大きく変更
されてしまいました。

 まず escape sequence の受信速度が遅くなりました。特殊キー
押下時の \e[1~ みたいな文字列ですね。この各文字が送出されき
るまでにかかる時間が 10 倍以上になってます。
 以前は他の環境と比べて速かったので、既定値の 1/10 にして応
答性を高めていたのですが、遅くなったせいで特殊キーがことごと
く Esc キー扱いになってしまいます。
 なので既定値の倍の 720ms にしました。体感的には少々もっさ
り感があるかも知れません。

 あと、cursor 位置取得用の escape sequence が使えなくなりま
した。正確には、取得しようとすると入力が block されてしまう
ので使えません。
 設定で USEGETCURSOR=1 にしている人は既定値の 0 に戻してお
いて下さい。

 出力の方も時折 block されるので、コマンドプロンプト以外の
端末を使う場合は適宜何かキー入力をして、出力を促してやる必要
があります。
 多分全然使いものにならないので、標準の cygwin.bat を使って
コマンドプロンプト上の bash を起動して下さい。


 私も可能な限りは対応したいのですが、ここまで来るともうとて
も相手していられる状態ではありませんので、暫く様子を見て状況
が改善しないようなら Cygwin は対象外にしたいと思います。
 もし、これらの問題について解決策をお持ちの方がいるようでし
たら、是非ご示唆願いたいところです。

                                               しらい たかし