Fix crash in SafePipeHandle.ReleaseHandle() on Windows (#3797)
authorNiklas Therning <niklas@therning.org>
Fri, 21 Oct 2016 01:52:38 +0000 (03:52 +0200)
committerMiguel de Icaza <miguel@gnome.org>
Fri, 21 Oct 2016 01:52:38 +0000 (20:52 -0500)
commit634ab6141520d0c670f9df9cb7d7c05735af9fbf
treefcc9ed5f2dbd4d929d4050ba423fc78e9404af31
parent1bf9409629c144dc5400a800e8ab20ed516d5ced
Fix crash in SafePipeHandle.ReleaseHandle() on Windows (#3797)

The ReleaseHandle() methods tries to deallocate the handle as if it was a
pointer to heap memory. But on Windows it's a HANDLE. The call to
Marshal.FreeHGlobal() causes a crash on Windows. It doesn't crash on other
platforms probably due to the emulated handles which are indeed heap allocated
memory objects. But the underlying file descriptor is never closed so there
should be a file descriptor leak on other platforms.

This patch fixes the issue by calling MonoIO.Close() on the handle rather than
Marshal.FreeHGlobal()
mcs/class/System.Core/Microsoft.Win32.SafeHandles/SafePipeHandle.cs