[Anthy-dev 1791] Re: uim-helperでのwrite(2)とselect(2)

アーカイブの一覧に戻る

YamaKen yamak****@bp*****
2005年 2月 9日 (水) 05:02:57 JST


ヤマケンです。加藤さん、おつかれさまです。

At Wed, 9 Feb 2005 00:32:16 +0900,
ekato****@ees***** wrote:
> 
> On Tue, Feb 08, 2005 at 06:32:32PM +0900,
> Etsushi Kato <ekato****@ees*****> wrote:
> > しょうがないので、uim_helper_send_message において、 EAGAIN の
> > 場合には usleep させてからリトライという手でとりあえず回避しました。
> > このあたりはもうすこしまともに修正したほうがいいような気もします…
> 
> uim-helper-server は上の変更で、すべての通信をもれなく write(2) できる
> ようになったはずです。
> 
> uim_helper_send_message() のほうは、非常に高頻度で同じ fd に write(2)
> が起きた場合 timeout してしまう可能性があるのですが、bridge での
> prop_{list,label} のコールバックを、フォーカスしているコンテキストでの
> みで行なうことによって問題を回避できたと思います。ヤマケンさんの方でも
> 様子を見て頂けますか?

uim-pref-gtkからgedit(gtk-im-uim)へのprop_update_customメッセー
ジが欠落なく正常に受信できる事を確認しました。対応ありがとうござ
いました。

加藤さんのおっしゃる通り、根本的なコードの見直しはまだ必要ですね。
これは0.4.6リリース後に行う事になるでしょうか。


本来は以下のように処理されるべきだと思いますが、このように処理す
るためにはuim-helper-serverで各コネクション毎のバッファを個別に
非同期write管理する必要があるので、処理の構造をかなり大本から変
えないと対応できません。

・uim-helper-server側のwrite(2)前にselect(2)でreadyかどうかチェッ
  ク(read(2)はチェックされている)

・uim_helper_send_message()ではblocking IOで問答無用に全データを
  write(2)

・client側でread(2)する前にはselect(2)でreadyかどうかチェック(現
  在もそうなっているはず)

VNC Reflectorのasync_ioというモジュールがこれらの機能を一通り提
供しているようなので、0.4.6リリース後にこれを使って
uim-helper-serverを再実装するといいんじゃないかと思います。もっ
と適したコードをご存知の方はお教えください。

http://sourceforge.net/projects/vnc-reflector/

VNC Reflectorは3-clause BSD-style licenseなのでuimに
async_io.[hc]を直接取り込めます。

-------------------------------
ヤマケン yamak****@bp*****



Anthy-dev メーリングリストの案内
アーカイブの一覧に戻る