MDA overlappedFreeError
Nota
Este artigo é específico do .NET Framework. Ele não se aplica a implementações mais recentes do .NET, incluindo o .NET 6 e versões posteriores.
O overlappedFreeError
assistente de depuração gerenciado (MDA) é ativado quando o Overlapped.Free(NativeOverlapped*) método é chamado antes que a operação sobreposta seja concluída.
Sintomas
Violações de acesso ou corrupção da pilha de lixo coletado.
Motivo
Uma estrutura sobreposta foi liberada antes da conclusão da operação. A função que está usando o ponteiro sobreposto pode gravar na estrutura mais tarde, depois de ter sido liberada. Isso pode causar corrupção de pilha porque outro objeto pode agora ocupar essa região.
Este MDA pode não representar um erro se a operação sobreposta não foi iniciada com êxito.
Resolução
Verifique se a operação de E/S usando a estrutura sobreposta foi concluída antes de chamar o Free(NativeOverlapped*) método.
Efeito no tempo de execução
Este MDA não tem efeito sobre o CLR.
Saída
A seguir está a saída de exemplo para este MDA.
An overlapped pointer (0x00ea3430) that was not allocated on the GC heap was passed via Pinvoke to the win32 function 'WriteFile' in module 'KERNEL32.DLL'. If the AppDomain is shut down, this can cause heap corruption when the async I/O completes. The best solution is to pass a NativeOverlappedStructure retrieved from a call to System.Threading.Overlapped.Pack(). If the AppDomain exits, the CLR will keep this structure alive and pinned until the I/O completes.
Configuração
<mdaConfig>
<assistants>
<overlappedFreeError/>
</assistants>
</mdaConfig>