From: simonmar Date: Tue, 17 Sep 2002 12:20:15 +0000 (+0000) Subject: [project @ 2002-09-17 12:20:15 by simonmar] X-Git-Tag: Approx_11550_changesets_converted~1665 X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=4a7c2629f1dd058ed4c9b6b6b37758b22a9fd6e4;p=ghc-hetmet.git [project @ 2002-09-17 12:20:15 by simonmar] The GC wasn't properly marking pending signal handlers, which could lead to "EVACUATED object entered!" errors. Also, a race occurs if a signal arrives during GC. Two fixes: (a) mark all pending signal handlers during GC, and (b) block signals during GC MERGE TO STABLE --- diff --git a/ghc/rts/Schedule.c b/ghc/rts/Schedule.c index 56426a5..c0a9c04 100644 --- a/ghc/rts/Schedule.c +++ b/ghc/rts/Schedule.c @@ -1,5 +1,5 @@ /* --------------------------------------------------------------------------- - * $Id: Schedule.c,v 1.153 2002/08/28 13:02:51 simonmar Exp $ + * $Id: Schedule.c,v 1.154 2002/09/17 12:20:15 simonmar Exp $ * * (c) The GHC Team, 1998-2000 * @@ -2472,6 +2472,9 @@ GetRoots(evac_fn evac) #if defined(PAR) || defined(GRAN) markSparkQueue(evac); #endif + + // mark the signal handlers (signals should be already blocked) + markSignalHandlers(evac); } /* -----------------------------------------------------------------------------