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

Reply via email to