Etsushi Kato
ekato****@ees*****
2005年 2月 8日 (火) 11:51:14 JST
On 2005/02/08, at 3:34, YamaKen wrote: >> あまりよくわかってないのですが、helper-server が custom のメッセージを送るのと、 >> prop のアップデートメッセージを受け取ることの両方で、fd が ready にならない状況が >> 生まれ、ヤマケンさんご指摘の状態になることがあるようです。 >> >> ここでもし uim_helper_fd() なし、あるいは 返り値 >= 0 で write してしまうと、 >> そのまま write で uim-pref ハングすることがかなりの確率で起きてしまいます。 >> >> custom 時に label のアップデートをさせないか、あるいは timeout の時間を設定して、 >> なるべくそういった状況を回避することしかちょっと思いつきませんが、どうなんでしょう? > > まず、uim_helper_send_message()のようにwriteするだけの関数では > uim_helper_fd()(つまりselect(2))無しで良いと思います。EPIPE等の > エラーハンドリングを加えればコネクションが切れてる場合等にも対処 > できるでしょう。 そうですね。今のままでも uim_helper_send_message() が問題になることは、 非常に稀なようですが対処してみました。 > uim-helper-serverは多数のコネクションとの間でread(2)とwrite(2)を > 繰り返すので適切にselect(2)する必要がありますね。これは既存の似 > たようなコードを真似るのが安全だと思います。 結局、uim-helper-server が im bridge との間で、 custom の update を送る処理と prop の update を受け付ける処理を、同時かつ大量にさばけ ていないのが問題みたいです。 > ちょっと探してみたところでは rshd.c が近いようです。 これからみてみます。ありがとうございます。 -- Etsushi Kato ekato****@ees*****