setCurrentDirectory and lightweight threads
Wolfgang Thaller
wolfgang.thaller at gmx.net
Sun Oct 24 12:04:30 EDT 2004
> Now, some of the most common operations used in dynamic web pages
> relate to directory listing/manipulation. I was happily thinking that
> System.Directory would provide the needed functionality. Indeed it
> does, but unfortunately setCurrentDirectory breaks the thread
> abstraction.
> What I mean is that if one page wants to change directory using
> setCurrentDirectory, this change affects all other (lightweight)
> threads as well, which is not how "ordinary" system threads works.
AFAIK, this _is_ how "ordinary" system threads work. See, for example:
http://www.uwm.edu/cgi-bin/IMT/wwwman?topic=chdir(2)&msection=3f, and
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/
fileio/base/setcurrentdirectory.asp
> Also it is clearly not what one would want in the kind of application
> I'm writing.
>
> Is this behavior of setCurrentDirectory intended? I can't see a
> situation in which you could take advantage of it, but that doesn't
> mean there can't be any. =)
>
> If it is not intended, is there any hope of it being "fixed"?
The behaviour is intended because it is the way the underlying
operating systems work. It's hard to work around that; while it would
be definitely possible (but tedious) to fix this for Haskell's IO
library, we'd run into serious trouble with FFI calls (if you call two
C functions from different Haskell threads, which will be the current
directory of the process while both functions execute simultaneously?)
So I fear that the only thing you can do is not to change the current
directory in multi-threaded programs.
Cheers,
Wolfgang
More information about the Glasgow-haskell-users
mailing list