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*****