Xkanon(15)

bless が端末のエコーバックを無効にしないようにします。

 Xkanon で bless が端末のエコーバックを無効にしないようにします。bless をプレイすると、端末のエコーバックが無効になってしまいます。また、この影響かどうかわかりませんが、たまに window を残したまま終了し、kill コマンドで殺さない限り window を閉じることができなくなります。

 bless は最初に動画で Basil のロゴを再生しているので、この動画再生処理が悪さをしていると考えました。動画再生は、mplayer を使っているので、そのあたりを見ていきます。

 処理は、contrib/movie.c にあります。check_mplayer 関数で動画にビデオとオーディオがあるかどうかをチェックしていますが、どうも子プロセスがゾンビになっているようです。

 子プロセスとして、mplayer を起動して、その mplayer の標準出力を読んで、判断しています。しかし、その標準出力を全部読み切る前にファイルを閉じてしまっています。これがゾンビとなる原因だと思います。

 そこで、判断できたら子プロセスを kill し、標準出力は、EOF となるまで読み切ってから閉じるように修正しました。

 これで、端末のエコーバックが無効になることを防ぐことができました。

 window を残したまま終了することもなくなるといいな。

Xkanon

Posted by sirius