Delen via


overlappedFreeError MDA

Notitie

Dit artikel is specifiek voor .NET Framework. Dit geldt niet voor nieuwere implementaties van .NET, waaronder .NET 6 en nieuwere versies.

De overlappedFreeError beheerde foutopsporingsassistent (MDA) wordt geactiveerd wanneer de Overlapped.Free(NativeOverlapped*) methode wordt aangeroepen voordat de overlappende bewerking is voltooid.

Symptomen

Toegangsschendingen of beschadiging van de garbagecollection heap.

Oorzaak

Er is een overlappende structuur vrijgemaakt voordat de bewerking is voltooid. De functie die de overlappende aanwijzer gebruikt, kan later naar de structuur schrijven nadat deze is vrijgemaakt. Dat kan leiden tot heapbeschadiging omdat een ander object nu die regio kan bezetten.

Deze MDA vertegenwoordigt mogelijk geen fout als de overlappende bewerking niet is gestart.

Oplossing

Zorg ervoor dat de I/O-bewerking met behulp van de overlappende structuur is voltooid voordat u de Free(NativeOverlapped*) methode aanroept.

Effect op de runtime

Deze MDA heeft geen effect op de CLR.

Uitvoer

Hieronder ziet u voorbeelduitvoer voor deze 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.

Configuratie

<mdaConfig>
  <assistants>
    <overlappedFreeError/>
  </assistants>
</mdaConfig>

Zie ook