[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

Re: [MD:4167] Re: CVS 2003-01-14 14:00 現在最新



>>>>> [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 のページ始めました)