Simon Marlow wrote:
> > I had thought of having the signal handler reap as many
> > terminated child
> > processes as possible, but had been concerned about a possible race
> > condition. After you suggested that approach, I thought some more and
> > decided that no race problem should exist. So I've
> > implemented multiple
> > reaping and it does help. I no longer have any tests hang as before.
> > (Note that I still do see the occasional "EVACUATED object entered!"
> > error.) However, the implementation turned out to be
> > surprisingly complex.
>
> Can you manage to get a repeatable case of the 'EVACUATED object' error?
> I'd really like to track that one down.
Unfortunately I've not seen a repeatable case of that error. But I'll keep
my eyes out for one. My hypothesis remains that it has to do with
reclaiming a Haskell signal handler too soon. The last I heard from you
about this is the message I've copied just below. Would you expect GHC 5.04
to behave differently with respect to this problem? I'll be trying 5.04
when I get a chance.
================
Subject: RE: GHC bug 525772 (signal handling)
Date: Mon, 8 Apr 2002 09:53:27 +0100
From: "Simon Marlow" <[EMAIL PROTECTED]>
To: "Dean Herington" <[EMAIL PROTECTED]>
> I noticed that you have fixed the subject bug. Thanks! (I would have
> noticed earlier, except that it seems the SourceForge bug
> tracker does not
> automatically set the submitter to "monitor" a bug report.)
>
> The bug is bothering me again (I'm still using 5.02.2). Do I
> ((cringe))
> need to build GHC from source to see your fixes? Is doing
> that difficult?
I tried to merge the changes through into the stable branch for the
upcoming 5.02.3 release, but they depended on too much stuff so I backed
off. However, we're also planning to put out a snapshot of the HEAD
branch in the next few days, which will have the changes.
Cheers,
Simon
================
> > The first issue I confronted is that the get*ProcessStatus
> > routines return
> > an error rather than "nothing" if there is no candidate child process.
> > (The GHC routines simply reflect the system call semantics.)
>
> So can't you just catch the error? Something like
>
> handler = do
> r <- try (getAnyProcessStatus ...)
> case r of
> Left _ -> return ()
> Right _ -> handler
Yes, I could have done that. I didn't because it would either have meant
ignoring errors other than the one I want to ignore, or extra complication
(Unix experimentation and more checking in my code) to discriminate the one
error I do want to ignore.
Dean
_______________________________________________
Glasgow-haskell-bugs mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs