[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]
[MD:6211] Dead-lock on IME input
- X-ml-count: 6211
- Subject: [MD:6211] Dead-lock on IME input
- From: Kyotaro HORIGUCHI <horiguti@xxxxxxxxxxx>
- Date: Thu, 02 Dec 2004 03:25:21 +0900 (JST)
- User-agent: Mew version 4.0.69 on Emacs 21.3 / Mule 5.0 (榊) / Meadow-2.10-dev (朝顔)
堀口です.
どうもしばしばIMEでの文字確定直後に固まることが頻繁になってきた
(なぜ?)ので調べたところ, メインスレッドが update_frame をやってい
る最中にメッセージスレッドに WM_PAINT が来て expose_frame を実行
するとタイミング次第で固まるという感じです. W32_BLOCK_INPUT での
デッドロックです.
環境は Meadow 2.10 Rev. 3567/WinXP SP2/Pen4 HT
IMEをONにしたまま右手をReturnキー, 左手を文字キーに置いて, 左右
の手をひたすらばしばしたたいていると(数文字ごとに確定を繰り返す)
早ければ2-3行. 運が悪いと画面が埋まるまで固まりませんが大体10行く
らいで固まります.
普段使っているノートPCで起きた記憶がないので, HyperThreading(も
しくはSMP?)が構成要件かも知れません. またはCPUの性能の問題かもし
れません.
対処として mw32_set_ime_font_property でも mw32_set_caret と同じ
ようにメッセージを送る時にブロックを解除するようにしました. (何か
微妙ですが..) これでデッドロックはおきなくなったようです. (Rev.3568)
ほかにも同じような可能性を持った場所はいくつもありそうですが, そ
れは調べていません^^;
以下が固まっときの状況です. なんとなく時間順..かな.
Main thread Message thread
redisplay_internal
update_frame W32_BLOCK_INPUT
update_window
detect_input_pending WndProc
get_input_pending WM_PAINT
gobble_input mw32_expose_frame W32_BLOCK_INPUT <= BLOCK
note_sync_event
mw32_process_main_thread_message
mw32_get_ime_font_property
SEND_MSGTHREAD_..() <= BLOCK
--
ほりぐちきょうたろう