[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]
Re: [MD:4167] Re: CVS 2003-01-14 14:00 現在最新
- X-ml-count: 4169
- Subject: Re: [MD:4167] Re: CVS 2003-01-14 14:00 現在最新
- From: MIYOSHI Masanori <miyoshi@xxxxxxxxxxxxxxxx>
- Date: Thu, 06 Feb 2003 22:03:14 +0900
- User-agent: Wanderlust/2.11.1 (Wonderwall) EMIKO/1.14.1 (Choanoflagellata) LIMIT/1.14.7 (Fujiidera) APEL/10.4 Emacs/21.1 (i386-msvc-nt5.1.2600) MULE/5.0 (SAKAKI) Meadow/1.99 Alpha4 (KUROGANE)
>>>>> [meadow-develop : No.4167] にて
>>>>> "圭一" = Keiichi Suzuki <keiichi@xxxxxxxxx> さんは書きました:
圭一> gdb で attach して各スレッドの backtrace を取ってみたところ下の
圭一> ような結果でしたので、 select-window-functions を nil にしてみた
圭一> ところ、固まらずにすむことまでは確認しました。
圭一> !!!! Thread 1 !!!!
snip
圭一> #1 0x77cf5f69 in USER32!SendMessageA ()
圭一> #2 0x0113cc1d in Ffep_get_mode () at mw32ime.c:630
snip
圭一> #10 0x0108b25c in Fselect_window (window=1117235712) at window.c:2761
圭一> #11 0x0108f01c in Fset_window_configuration (configuration=1113776128)
圭一> at window.c:5057
snip
圭一> #35 0x01003078 in main (argc=2, argv=0xa725a8, envp=0xa72b20) at emacs.c:1687
これはメインスレッドですよね。
ちょっと調べたところ、次のことが分かりました。
・#11 の Fset_window_configuration() で W32_BLOCK_INPUT が呼ばれて、他
のスレッドをブロックします。
・#2 の Ffep_get_mode() で、WM_MULE_IMM_GET_STATUS というメッセージを
送ります。
以下推測です。
・#11 から #2 の間に、メッセージスレッドで、何らかのイベントを処理する
ときに W32_BLOCK_INPUT が呼ばれて待機してしまう。
・#2でメッセージを送るが、メッセージスレッドが待機状態のため、処理が完
了せず、デッドロック状態に陥ってしまう。
圭一> !!!! Thread 2 !!!!
圭一> #1 0x77f7561d in ntdll!RtlEnumerateGenericTableLikeADirectory ()
圭一> #2 0x0112832b in mw32_WndProc (hwnd=0xa039c, msg=15, wParam=0, lParam=0)
圭一> at mw32fns.c:3028
これはメッセージスレッドですよね。
#2 は mw32_expose_frame() なのですが、#1 の意味が良く分からないです。
ところで、前述の仮説が正しいとしても、対処方法は分かりません。^^;;;
IME 関連の処理に WM_MULE_IMM_GET_STATUS などのメッセージを使うのはなぜ
なんでしょうか?
--
三好 雅則 mailto:miyoshi@xxxxxxxxxxxxxxxx
http://www.boreas.dti.ne.jp/~miyoshi/ (Meadow2 のページ始めました)