[Haskell-cafe] Re: A GHC error message puzzle
Tillmann Rendel
rendel at Mathematik.Uni-Marburg.de
Fri Aug 13 12:00:55 EDT 2010
Simon Marlow wrote:
> So what happens is this:
>
> - the recursive definition causes the main thread to block on itself
> (known as a "black hole")
>
> - the program is deadlocked (no threads to run), so the runtime
> invokes the GC to see if any threads are unreachable
>
> - the GC finds that
> (a) the main thread is unreachable and blocked on a blackhole, so it
> gets a NonTermination exception
> (b) the Handle is unreachable, so its finalizer is started
>
> - the finalizer runs first, and closes the Handle
>
> - the main thread runs next, and the exception handler for writeFile
> tries to close the Handle, which has already been finalized
Why is the Handle found unreachable? There seems to be a pointer to the
Handle somewhere, which is later passed to the exception handler and
used there. Why is that pointer not regarded by GC?
Is that situation Handle-specific, or could step (b) above free memory
the exception handler is going to acess?
> Really hClose shouldn't complain about a finalized handle, I'll see if I can fix that.
That sounds like a work-around to me, not a fix, because it would not
fix more complicated exception handlers.
Tillmann
More information about the Haskell-Cafe
mailing list