overlappedFreeError MDA
Note
This article is specific to .NET Framework. It doesn't apply to newer implementations of .NET, including .NET 6 and later versions.
The overlappedFreeError
managed debugging assistant (MDA) is activated when the Overlapped.Free(NativeOverlapped*) method is called before the overlapped operation has completed.
Symptoms
Access violations or corruption of the garbage-collected heap.
Cause
An overlapped structure was freed before the operation completed. The function that is using the overlapped pointer might write to the structure later, after it has been freed. That can cause heap corruption because another object might now occupy that region.
This MDA might not represent an error if the overlapped operation did not start successfully.
Resolution
Ensure that the I/O operation using the overlapped structure has completed before calling the Free(NativeOverlapped*) method.
Effect on the Runtime
This MDA has no effect on the CLR.
Output
The following is sample output for this 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.
Configuration
<mdaConfig>
<assistants>
<overlappedFreeError/>
</assistants>
</mdaConfig>