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