[Mono-devel-list] file-io.c question and help requested
Derek McUmber
derek.mcumber at datamtnsol.com
Wed Feb 18 11:19:47 EST 2004
Hi all:
I am looking for some insight on a mono problem I have in
mono/metadata/file-io.c
I have been working on a port of mono to Win98 and have
only a couple dozen changes that will need to be inserted
into the build. I will do a writeup of those changes and
ask for help once I have it working.
My current issue is with the w32API call in gcc called
GetFileAttributes.
The following code will crash a Win95/98 machine by
hanging the kernel (so I assume) on the second execution
of the .exe. (doesn't seem to matter how many times I loop.)
using System;
using System.IO;
class X
{
public static void Main ()
{
string path = "C:\\anyfile.txt";
for (int i = 0; i < 1000; i++) {
if (!File.Exists(path)) {
Console.WriteLine("Not found.");
} else {
Console.WriteLine("Found.");
}
}
}
}
It hangs the OS at the internal call GetFileAttributes
I notice in a debug version of mono that the
output from file-io.c looks like this:
Calling GetFileAttributes "anyfile.txt"
Calling GetFileAttributes "anyfile.txt"
Returned from GetFileAttributes status: 1
Returned from GetFileAttributes status: 1
Error code from GetFileAttributes status: 0
Error code from GetFileAttributes status: 0
At this point, the machine stops and I need to power down
and reboot.
A. Could mono.exe be unloading the kernal upon exit of the app?
A.Test: I try to LoadLibrary("Kernal32.dll") before the
GetFileAttributes call, every time, and I get the error code
1157 (dll_not_found) and I still hang.
B. Win98 kernel is not handling threading/context switching
properly.
One guess is that this windows library isn't completely threadsafe on
Win98 since the same code executes fine on WinXP/2000.
Should I find a way to block mono for this call on Win98
(a few in file-io.c) so that it must not allow this behavior?
C. On the web, someone on the web changed their implementation
of file existence to use a different api call (FileNext?)
and the problem went away..... Should I try this and would we
want to change mono?
I know that a change like this will have implications for the
code base and want to find an elegant solution.
Thanks in advance,
Derek
More information about the Mono-devel-list
mailing list