Por que fclose travar / deadlock? (Janelas

Tenho um processo de monitoração de alterações de diretório que lê atualizações de arquivos em um conjunto de diretórios. Eu tenho outro processo que executa pequenas gravações em muitos arquivos nesses diretórios (programa de teste). Figura cerca de 100 diretórios com 10 arquivos em cada um e cerca de 500 arquivos sendo modificados por segund

Depois de um tempo, o processo de monitoração de diretório trava uma chamada parafclose() em um método que basicamente segue o arquivo. Neste método, eufopen() no arquivo, verifique se o identificador é válido, faça algumas buscas e leituras e, em seguida, chamefclose(). Essas leituras são todas executadas pelo mesmo encadeamento no processo. Após o travamento, o thread nunca progride.

Não consegui encontrar nenhuma informação boa sobre o porquêfclose() pode entrar em conflito em vez de retornar algum tipo de código de erro. A documentação menciona_fclose_nolock(), mas parece não estar disponível para mim (Visual Studio 2003

O travamento ocorre para compilações de depuração e lançamento. Em uma compilação de depuração, posso ver quefclose() calls_free_base(), que trava antes de retornar. Algum tipo de chamada para o kernel32.dll => ntdll.dll => KernelBase.dll => ntdll.dll está girando. Aqui está o assembly do ntdll.dll que faz um loop indefinidamente:

77CEB83F  cmp         dword ptr [edi+4Ch],0 
77CEB843  lea         esi,[ebx-8] 
77CEB846  je          77CEB85E 
77CEB848  mov         eax,dword ptr [edi+50h] 
77CEB84B  xor         dword ptr [esi],eax 
77CEB84D  mov         al,byte ptr [esi+2] 
77CEB850  xor         al,byte ptr [esi+1] 
77CEB853  xor         al,byte ptr [esi] 
77CEB855  cmp         byte ptr [esi+3],al 
77CEB858  jne         77D19A0B 
77CEB85E  mov         eax,200h 
77CEB863  cmp         word ptr [esi],ax 
77CEB866  ja          77CEB815 
77CEB868  cmp         dword ptr [edi+4Ch],0 
77CEB86C  je          77CEB87E 
77CEB86E  mov         al,byte ptr [esi+2] 
77CEB871  xor         al,byte ptr [esi+1] 
77CEB874  xor         al,byte ptr [esi] 
77CEB876  mov         byte ptr [esi+3],al 
77CEB879  mov         eax,dword ptr [edi+50h] 
77CEB87C  xor         dword ptr [esi],eax 
77CEB87E  mov         ebx,dword ptr [ebx+4] 
77CEB881  lea         eax,[edi+0C4h] 
77CEB887  cmp         ebx,eax 
77CEB889  jne         77CEB83F 

Alguma idéia do que pode estar acontecendo aqu

questionAnswers(2)

yourAnswerToTheQuestion