public static readonly IntPtr
InvalidHandle = (IntPtr)(-1L);
+ static bool dump_handles = Environment.GetEnvironmentVariable ("MONO_DUMP_HANDLES_ON_ERROR_TOO_MANY_OPEN_FILES") != null;
+
// error methods
public static Exception GetException (MonoIOError error)
{
return new FileNotFoundException (message, path);
case MonoIOError.ERROR_TOO_MANY_OPEN_FILES:
+ if (dump_handles)
+ DumpHandles ();
return new IOException ("Too many open files", unchecked((int)0x80070000) | (int)error);
case MonoIOError.ERROR_PATH_NOT_FOUND:
[MethodImplAttribute (MethodImplOptions.InternalCall)]
get;
}
+
+ [MethodImplAttribute (MethodImplOptions.InternalCall)]
+ extern static void DumpHandles ();
}
}
}
#endif
+
+void _wapi_handle_dump (void);
+
+void ves_icall_System_IO_MonoIO_DumpHandles (void)
+{
+#ifndef HOST_WIN32
+ _wapi_handle_dump ();
+#endif
+}
extern gint64
mono_filesize_from_fd (int fd);
+void
+ves_icall_System_IO_MonoIO_DumpHandles (void);
+
G_END_DECLS
#endif /* _MONO_METADATA_FILEIO_H_ */
ICALL(MONOIO_4, "CreatePipe", ves_icall_System_IO_MonoIO_CreatePipe)
ICALL(MONOIO_5, "DeleteFile(string,System.IO.MonoIOError&)", ves_icall_System_IO_MonoIO_DeleteFile)
#endif /* !PLATFORM_RO_FS */
+ICALL(MONOIO_38, "DumpHandles", ves_icall_System_IO_MonoIO_DumpHandles)
ICALL(MONOIO_34, "DuplicateHandle", ves_icall_System_IO_MonoIO_DuplicateHandle)
ICALL(MONOIO_37, "FindClose", ves_icall_System_IO_MonoIO_FindClose)
ICALL(MONOIO_35, "FindFirst", ves_icall_System_IO_MonoIO_FindFirst)