.NET线程消失了

时间:2016-11-15 07:54:02

标签: asp.net .net multithreading

我有转发w3wp进程(由procdump采取),我看到了奇怪的情况。

我的代码的简化版本:

logger.Log(Thread.CurrentThread.ManagedThreadId);
using(semaphore_release_on_dispose_object)
{
  // some third party code with unmanaged parts
  DangerousCode();
}

semaphore_release_on_dispose_object - 在Dispose中释放信号量。

在一些超时之后进行了进程转储,当时很明显信号量没有被释放

我在转储中发现了线程,但似乎变得“糟糕”。它按~命令列出,但未由!threads命令列出。当我切换到它时,我可以看到非托管堆栈,但没有管理:

0:004> ~
...
   3  Id: 63ec.11b0 Suspend: 1 Teb: 000007ff`fffae000 Unfrozen
...
0:004> ~~[11b0]s
ntdll!NtRemoveIoCompletion+0xa:
00000000`76e913aa c3              ret
0:003> k
 # Child-SP          RetAddr           Call Site
00 00000000`01a3f818 000007fe`fcea169d ntdll!NtRemoveIoCompletion+0xa
01 00000000`01a3f820 00000000`76d2a4e1 KERNELBASE!GetQueuedCompletionStatus+0x39
02 00000000`01a3f880 000007fe`f0311f7b kernel32!GetQueuedCompletionStatusStub+0x11
03 00000000`01a3f8c0 000007fe`f0312024 w3tp!THREAD_POOL_DATA::ThreadPoolThread+0x3b
04 00000000`01a3f910 000007fe`f03120a1 w3tp!THREAD_POOL_DATA::ThreadPoolThread+0x34
05 00000000`01a3f940 00000000`76d3652d w3tp!THREAD_MANAGER::ThreadManagerThread+0x61
06 00000000`01a3f970 00000000`76e6c521 kernel32!BaseThreadInitThunk+0xd
07 00000000`01a3f9a0 00000000`00000000 ntdll!RtlUserThreadStart+0x1d
0:003> !clrstack
OS Thread Id: 0x11b0 (3)
        Child SP               IP Call Site
GetFrameContext failed: 1
0000000000000000 0000000000000000 

所以,我认为不知何故,第三方代码如何破坏'线程并跳过最后阻止(使用)。

任何想法如何可能?

0 个答案:

没有答案