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

アーカイブの一覧に戻る

Etsushi Kato ekato****@ees*****
2005年 3月 18日 (金) 16:16:37 JST


加藤です。こんにちは。

On 2005/03/18, at 0:39, YamaKen wrote:

>>> このように全recipientへの送信完了を待ってから次の断片のreadに移
>>> るのではなく、コネクション毎のバッファリングとselect(2)を使った
>>> 非同期writeで解決しようというのが[Anthy-dev 1791]で意図した事で
>>> す。そして、新規にコードを書くよりは既存の実績のあるコードを流用
>>> したいという事で、要求を満たしていそうな上述のasync_ioモジュール
>>> を候補に上げました。
>>
>> 実は、試しに 0.4.6 が出る直前にそのような仕組みを今の helper-server
>> に使い、また uim_helper_send_message() を blocking IO にしたのですが
>
> これは知りませんでした。それだと話の前提が変わってきますね。

これは手元での単なる実験でして、確信しているわけではまったくありません。
また、vnc_reflector を helper-server に組み込んだわけではなく、
main loop の select で write 側の fd も把握して、EAGAIN の場合
は、queue に入れるような構造にして試してみただけです。

> その前に再確認させて欲しいんですが、現在の実装についての加藤さん
> の認識は以下のどちらでしょうか?
>
> ・コードの構造的に不自然ではあるが、通信は全ての場面で正常に行え
>   るはず
>
> ・おおむね正常に動いているが、条件によっては不具合が起こり得る

現在の uim 程度の通信 (gtk/qt immodule 数個, uim-xim 一つ)
なら、正常に通信は行えるのではないでしょうか。
ただ、クライアントが多い場合で、それらのクライアントにおいて、
custom 時の prop_{list,label} のアップデートが多数のコンテキスト
で生じる場合には保障できないという感じだと思います。

> 私は加藤さんの「そうですね、必要です」という言葉が後者の状況を指
> すものだと思っていたのでコードの構造を見直す方向で話を進めていま
> した。

もちろん、write のコードの見直しが必要だと思うのですが、それだけでうまく対処
できるのかどうかよくわからない、というつもりでした。
そのため、コードの見直しも行ったうえで、ブロードキャストではなく、
toolbar と普通のクライアントを server 側で区別して write するのも手
かなと感じました。

> 私が現在問題だと思っているのはメッセージのブロードキャストという
> トランスポート層の基本機能そのものに欠陥がある(あった)事であって、
> それを利用する上層がどのようにメッセージを発行するかとは関係無く
> 解決する必要があると認識しています。

そうですね。もともと fd が同時に書き込まれる場合を前提にしてないコード
だったようですから、まず基本部分を変更しないとだめですね。

-- 
Etsushi Kato
ekato****@ees*****




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