[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]
Re: [MD:4310] Meadow のデッドロック?
- X-ml-count: 4315
- Subject: Re: [MD:4310] Meadow のデッドロック?
- From: MIYOSHI Masanori <miyoshi@xxxxxxxxxxxxxxxx>
- Date: Tue, 01 Apr 2003 21:43:29 +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 Alpha6-dev (IKADUCHI)
>>>>> [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 のページ始めました)