[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-devel:17440] X11R7.3以降、liX11のXNextEvent()が壊れている



別にDebianに限定した話ではなく、しかも直接的に解決できる
話でもないんですが情報共有です。

Xorg X11R7.3以降、liX11のXNextEvent()が壊れているようです(*1)。

本来常に成功しなければいけないXNextEvent()が、XlibDisplayIOErrorが
立っている状態で呼び出すとsegfaultします。XlibDisplayIOErrorはログイン
時など(*2)に発生することがあり、これによってIIIMFが落ちてATOK X3が
あがってこない、という現象に陥ります。

この問題、XNextEvent()が読んでいる_XReadEvents()の呼び出し
タイミングの問題でもあるので、単純にえんえんと呼び出すだけでも
直ってしまいます。以下のようなパッチです。

--- NextEvent.c.orig
+++ NextEvent.c
@@ -45,9 +45,14 @@
        register _XQEvent *qelt;

 	LockDisplay(dpy);

-	if (dpy->head == NULL)
+        while(dpy->head == NULL){
            _XReadEvents(dpy);
+           usleep(400);
+	}
 	qelt = dpy->head;
 	*event = qelt->event;
 	_XDeq(dpy, NULL, qelt);

が、これはXの内部まで考慮したパッチになっていないので、ちとアレな感じです
(スペースの位置とか揃ってないよとかも放置プレイ)。

で、とりあえずXOrgのMLにはチクって(*3)いますが反応があんまりありません。
もう2〜3日したらXOrgのBTSに突っ込んだ上でdebbugしてubuntubugする
予定です。

短期的には(そして最終的にもバージョンによっては)パッケージャの側で
パッチを入れないといけないわけですが(そしてUbuntu Japanese Team
では自前リポジトリのexperimentalに入れてubuntu.comにはフィード
バックしていません)、こんな感じの問題があるよ、てな認識だけ
共有しといて頂ければと思います。

また、どなたかより良いパッチを思いついたら教えて頂けると助かります。

(*1) see http://d.hatena.ne.jp/hito-d/20081001#1222866182
(*2) gconf経由でキーボードレイアウトを変えたり、ログイン直後に
  レイアウト変更が反映されたりした時。
(*3) http://lists.freedesktop.org/archives/xorg/2008-September/039042.html