2010-03-01 2 views
0

Тупик возникает в моем приложении, когда инициализация локальной статической переменной происходит в функции, вызванной из точки входа DLLMain с параметром DLL_THREAD_DETACH.Помощь Анализ взаимоблокировки

Ниже Windbg анализ

Это обычно вызывается другим потоком, содержащего блокировку загрузчика.

Ниже приведены замки.

CritSec Ntdll! LdrpLoaderLock + 0 при 7c97e178

LockCount 3

RecursionCount 1

OwningThread 17e8

EntryCount д

ContentionCount д

*** Locked

CritSec MSVCR80! __ APP_TYPE + 94 на 781c3bc8

LockCount 1

RecursionCount 1

OwningThread 1100

EntryCount 1

ContentionCount 1 *** Locked

#

стек вызовов 17e8 Thread

781c3bc8 78132bd9 0777fde4 Ntdll! RtlEnterCriticalSection + 0x46

00000008 00000000 b87d2630 MSVCR80! _lock + 0x2e

0864ae10 08631d7f 0864ae10 EPComUtilities32 ! _onexit + 0x36

0864ae10 b87d2588 00000001 EPComUtilities32! atexit + 0x9

0777fea8 0864719f 08630000 EPComUtilities32! XCriticalSectionEx :: ThreadTerminated + 0x5f

08630000 00000003 00000000 EPComUtilities32! DllMain + 0x20

08630000 7c90118a 08630000 EPComUtilities32! __ DllMainCRTStartup + 0x7A

08630000 00000003 00000000 EPComUtilities32! _DllMainCRTStartup + 0x1d

Call Stack thread 1 100

000000b0 00000000 00000000 ntdll!ZwWaitForSingleObject + 0xc

000000b0 FFFFFFFF 00000000 kernel32! WaitForSingleObjectEx + 0xa8

000000b0 FFFFFFFF 06ce64e0 kernel32! WaitForSingleObject + 0x12

000480ba 000f4240 00000000 CATSysMultiThreading! CATThreads :: Регистрация + 0xf5

0012fcc8 00000004 00000000 JS0GROUP ! CATLM :: StopHB + 0xF4

d138509f 00416694 00000001 JS0GROUP! CATLM :: + 0x6b разрушать

00000000 00000000 00000000 MSVCR80! _cinit + 0xd6

00000000 0012fd6c 081e68d9 MSVCR80! Выход + 0xD

00000000 06d404f0 0998fb90 JS0GROUP! CATExit + 0x1D

00000000 004ef366 0000000d DNBPLMProvider! DNBEPLMTransactionMgt :: OnApplicationExit + 0x229

00000000 0012fd9c 004eabfc JS0GROUP! CATCallExits + 0x2bc

00000000 0012ff7c 0040cefd JS0GROUP! CATError NormalEnd + 0x31 00000000 06ce71d0 06ce71d0 JS0GROUP! CATExit + 0xc

00000007 06cdb120 059b61d8 DLMMfgContextSolver! Главная + 0x146d

FFFFFFFF FFFFFFFF bffde000 DLMMfgContextSolver! __ tmainCRTStartup + 0x10f

#

Пожалуйста дать вам комментарии к понять, что могло вызвать тупик. Примечание: в тот момент я сделать статическую переменную как не статики проблема исчезает в этом контексте, например, публикуемую в форуме Deadlock occurs in Function Scoped Static variables (Thread Unsafe in VC++)

+0

Попробуйте использовать глобальную переменную. – logout

+0

Использование глобальной переменной может решить, но я хотел понять проблему. Почему локальная статическая переменная инициализации приводит к блокировке. Как вы видите стек вызовов Thread 17e8. В функции недействительного XCriticalSectionEx :: ThreadTerminated() { Const статический XEPComBSTR bstrMethod = __FUNCTION__; } Выполнение вышеуказанной локальной статической переменной bstrMethod инициализация, почему MSVCR80! _lock ??? – IRFAN

ответ

Смежные вопросы