title: Threads are blocked in malloc and free, virtual size
body: <p>I'm running a 64-bit multi-threaded program on the windows server 2003 server (X64),  It run into a case that some of the threads seem to be blocked in the malloc or free function forever. The stack trace is like follows:</p>
  
  <pre><code>ntdll.dll!NtWaitForSingleObject()  + 0xa bytes  
  ntdll.dll!RtlpWaitOnCriticalSection()  - 0x1aa bytes    
  ntdll.dll!RtlEnterCriticalSection()  + 0xb040 bytes 
  ntdll.dll!RtlpDebugPageHeapAllocate()  + 0x2f6 bytes    
  ntdll.dll!RtlDebugAllocateHeap()  + 0x40 bytes  
  ntdll.dll!RtlAllocateHeapSlowly()  + 0x5e898 bytes  
  ntdll.dll!RtlAllocateHeap()  - 0x1711a bytes    
  MyProg.exe!malloc(unsigned __int64 size=0)  Line 168    C
  MyProg.exe!operator new(unsigned __int64 size=1)  Line 59 + 0x5 bytes   C++
  
  
  ntdll.dll!NtWaitForSingleObject()   
  ntdll.dll!RtlpWaitOnCriticalSection()   
  ntdll.dll!RtlEnterCriticalSection()     
  ntdll.dll!RtlpDebugPageHeapFree()   
  ntdll.dll!RtlDebugFreeHeap()    
  ntdll.dll!RtlFreeHeapSlowly()   
  ntdll.dll!RtlFreeHeap()     
  MyProg.exe!free(void * pBlock=0x000000007e8e4fe0)   C
  </code></pre>
  
  <p>BTW, the param values passed to the new operator is not correct here maybe due to optimization.</p>
  
  <p>Also, at the same time,  I found in the process Explorer, the virtual size of this program is 10GB, but the private bytes and working set is very small (&lt;2GB).  We did have some threads using virtualalloc but in a way that commit the memory in the call, and these threads are not blocked.</p>
  
  <pre><code>m_pBuf = VirtualAlloc(NULL, m_size, MEM_COMMIT, PAGE_READWRITE);
  ......
  VirtualFree(m_pBuf, 0, MEM_RELEASE);
  </code></pre>
  
  <p>This looks strange to me, seems a lot of virtual space is reserved but not committed, and malloc/free is blocked by lock. I'm guessing if there's any corruptions in the memory/object, so plan to turn on gflag with pageheap to troubleshoot this.</p>
  
  <p>Does anyone has similar experience on this before?  Could you share with me so I may get more hints?</p>
  
  <p>Thanks a lot!</p>