C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 18 を表示中)
■6857 / )  Re[3]: Control.Invokeが使えない件。
□投稿者/ NyaRuRu (15回)-(2007/08/25(Sat) 04:41:56)
2007/08/25(Sat) 04:47:26 編集(投稿者)

No6849 (れい さん) に返信
> 環境とかで問題が発生する確率が大きく変わるので頻度は参考程度ですが、
> http://bbs.wankuma.com/index.cgi?mode=al2&namber=6760 のコードでは
> デッドロックが起こりえることは間違いありません。

確かに http://bbs.wankuma.com/index.cgi?mode=al2&namber=6760 のコードでフォーム2を閉じるとハングすることがあるのは再現しました.
が,アンマネージデバッグを有効にするで Win32 例外を一通り眺めてみると,ハング時にはファイナライザスレッドから RichEdit に飛んで COM リソースの解放をしているっぽくて,そこでアクセス違反が起きてましたよ.
以下コールスタックです.

riched20.dll!CNotifyMgr::Remove() + 0x5 bytes
riched20.dll!CTxtRange::~CTxtRange() + 0x2d bytes
riched20.dll!CTxtRange::`scalar deleting destructor'() + 0xd bytes
riched20.dll!CTxtRange::Release() + 0x1a bytes
mscorwks.dll!ReleaseTransitionHelper() + 0x5f bytes
mscorwks.dll!SafeReleaseHelper() + 0x6d bytes
mscorwks.dll!SafeRelease() + 0x2f bytes
mscorwks.dll!RCW::ReleaseAllInterfaces() + 0x53 bytes
mscorwks.dll!RCW::ReleaseAllInterfacesCallBack() + 0x96 bytes
mscorwks.dll!RCW::Cleanup() + 0x22 bytes
mscorwks.dll!RCWCleanupList::ReleaseRCWListRaw() + 0x14 bytes
mscorwks.dll!RCWCleanupList::ReleaseRCWListInCorrectCtx() + 0x4380 bytes
mscorwks.dll!RCWCleanupList::CleanupAllWrappers() + 0x10e733 bytes
mscorwks.dll!SyncBlockCache::CleanupSyncBlocks() - 0x5653c bytes
mscorwks.dll!Thread::DoExtraWorkForFinalizer() + 0xc9d13 bytes
mscorwks.dll!WKS::GCHeap::FinalizerThreadWorker() + 0xa8 bytes
mscorwks.dll!Thread::UserResumeThread() - 0x204ae2 bytes
mscorwks.dll!Thread::DoADCallBack() - 0x203b25 bytes
mscorwks.dll!Thread::DoADCallBack() - 0x203c00 bytes
mscorwks.dll!ManagedThreadBase_NoADTransition() + 0x32 bytes
mscorwks.dll!ManagedThreadBase::FinalizerBase() + 0xb bytes
mscorwks.dll!WKS::GCHeap::FinalizerThreadStart() + 0xa9 bytes
mscorwks.dll!Thread::intermediateThreadProc() + 0x46 bytes
kernel32.dll!@BaseThreadInitThunk@12() + 0x12 bytes
ntdll.dll!__RtlUserThreadStart@8() + 0x27 bytes

ちょっと月末締めの原稿書きが忙しいのでこれ以上調べるつもりはないですが,sos.dll 等を使えばその「デッドロック時」に何が起きているかもうちょっと調べられるはずなので,せめて待機中のハンドルが何であるかとか前後で変な (アンマネージ) 例外が起きていないかとか,調べた方がいいんじゃないですかね?
返信 編集キー/


管理者用

- Child Tree -