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
/* ---------------------------------------------------------------------------
- * $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
*
#if defined(PAR) || defined(GRAN)
markSparkQueue(evac);
#endif
+
+ // mark the signal handlers (signals should be already blocked)
+ markSignalHandlers(evac);
}
/* -----------------------------------------------------------------------------