Зависание в CoUninitialize
От: Voinov Россия http://www.svoinov.ru
Дата: 13.04.11 09:09
Оценка:
Hi All,

Есть серверное приложение с кучей одинаковых потоков. В каждом потоке в начале вызывается CoInitialize, а в конце CoUninitialize. Сами потоки выполняют некоторые скрипты, где могут создаваться различные COM объекты. Изредка вызов CoUninitialize зависает и не даёт потоку нормально завершиться. При этом стек вызовов имеет такой вид:

---- Registers ----
EAX=00000000 EBX=7C81A360 ECX=05A6FE28 EDX=7C82860C
ESI=00000000 EDI=05A6FBD8 ESP=05A6FB98 EBP=05A6FC00
CS=001B DS=0023
SS=0023 ES=0023
FS=003B GS=0000
EIP=7C82860C
EFLAGS=00000206
---- Callstack ----
# 0x7C82860C, KiFastSystemCallRet+0, <no source info>, ntdll
# 0x77E424FD, Sleep+15, <no source info>, kernel32
# 0x77C9180B, NdrEncapsulatedUnionMarshall+21317, <no source info>, RPCRT4
# 0x77691EB3, CreateErrorInfo+4980, <no source info>, ole32
# 0x77691F8E, CreateErrorInfo+5199, <no source info>, ole32
# 0x77691F53, CreateErrorInfo+5140, <no source info>, ole32
# 0x77691F26, CreateErrorInfo+5095, <no source info>, ole32
# 0x7769182A, CreateErrorInfo+3307, <no source info>, ole32
# 0x7769174C, CreateErrorInfo+3085, <no source info>, ole32
# 0x776BCE40, CoUninitialize+407, <no source info>, ole32
# 0x776BCDF2, CoUninitialize+329, <no source info>, ole32
# 0x00409AB1, ScriptThreadProc+577, scriptthread.cpp [.text+0x00008AB1] 94+0, surrogate

Т.е. оно зависает в каком-то Sleep, вызываемом из NdrEncapsulatedUnionMarshall.
Сталкивался ли кто-нибудь с подобным и как это можно побороть?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.