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

Re: [MD:4310] Meadow のデッドロック?



>>>>> [meadow-develop : No.4310] にて
>>>>> "藤井
" = "M.Fujii" <boochang@xxxxxxxxxxxx> さんは書きました:
藤井> 藤井です。

藤井> 以下の条件で Meadow が固まってしまいます。

藤井> 1. -q オプション付きで Meadow を起動する。
藤井> 2. (mw32-ime-initialize) を評価する。
藤井> 3. 適当にファイルを開いて編集し、保存せずにウィンドウ右上の × をクリッ
藤井>    クして Meadow を終了させようとする。
藤井> 4. 保存していないファイルをどうするか問い合わせるポップアップが表示さ
藤井>    れたら、すかさず別のアプリケーションのウィンドウをアクティブにする。

snip

藤井> thr 1 は Fset_window_configuration でクリティカルセクション
藤井> にはいっています。thr 2 は mw32m_new_focus_frame でクリティ
藤井> カルセクションにはいります。

藤井> # [MD:4167] の backtrace と結構似ているように思います。関係があるのか
藤井> # もしれません。

うーん、圭一さんの症状と似てますね。

対処療法になりますが、下記の patch のように message を使わずに 
Imm 関連の関数を直接呼び出すことで、この問題は回避できます。
commit しても構わないでしょうかね?


Fset_window_configuration では mouseface の非同期表示のために、他
のスレッドを BLOCK しているようです。これが原因でデッドロックして
いるようですね。

したがって、本格的に対処するには、下記のように mouseface の非同期
表示を止めるか、または、競合するリソースの管理を厳密にやる必要が
あるかと思います。

>>>>> [meadow-develop : No.4314] にて
>>>>> "三好" = 私は書きました:
三好> (4) スレッド間のリソース競合
snip
三好>   o この問題を複雑にしている mouseface の非同期表示を止めて、Meadow1 
三好>     と同じように同期表示に戻す手もある。


--- ./mw32ime.c.orig	2002-09-28 11:20:13.000000000 +0900
+++ ./mw32ime.c	2003-04-01 21:33:32.000000000 +0900
@@ -627,7 +627,11 @@
 #else
       hwnd = hwndConsole;
 #endif
+#if 0
       result = SendMessage(hwnd, WM_MULE_IMM_GET_STATUS, 0, 0);
+#else
+      result = mw32_get_ime_status (hwnd);
+#endif
       
       return result ? Qt : Qnil;
     }

--
三好 雅則 mailto:miyoshi@xxxxxxxxxxxxxxxx
          http://www.boreas.dti.ne.jp/~miyoshi/ (Meadow2 のページ始めました)