summaryrefslogtreecommitdiff
path: root/rts/Schedule.c
diff options
context:
space:
mode:
Diffstat (limited to 'rts/Schedule.c')
-rw-r--r--rts/Schedule.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/rts/Schedule.c b/rts/Schedule.c
index 45959a92eb..2a2cc22a66 100644
--- a/rts/Schedule.c
+++ b/rts/Schedule.c
@@ -581,6 +581,10 @@ static void
schedulePreLoop(void)
{
// initialisation for scheduler - what cannot go into initScheduler()
+
+#if defined(mingw32_HOST_OS)
+ win32AllocStack();
+#endif
}
/* -----------------------------------------------------------------------------
@@ -779,6 +783,10 @@ schedulePushWork(Capability *cap USED_IF_THREADS,
if (emptySparkPoolCap(free_caps[i])) {
spark = tryStealSpark(cap->sparks);
if (spark != NULL) {
+ /* TODO: if anyone wants to re-enable this code then
+ * they must consider the fizzledSpark(spark) case
+ * and update the per-cap spark statistics.
+ */
debugTrace(DEBUG_sched, "pushing spark %p to capability %d", spark, free_caps[i]->no);
traceEventStealSpark(free_caps[i], t, cap->no);
@@ -1406,6 +1414,11 @@ scheduleDoGC (Capability *cap, Task *task USED_IF_THREADS, rtsBool force_major)
// multi-threaded GC: make sure all the Capabilities donate one
// GC thread each.
waitForGcThreads(cap);
+
+#if defined(THREADED_RTS)
+ // Stable point where we can do a global check on our spark counters
+ ASSERT(checkSparkCountInvariant());
+#endif
}
#endif
@@ -1436,6 +1449,8 @@ delete_threads_and_gc:
#endif
traceEventGcEnd(cap);
+ traceSparkCounters(cap);
+
if (recent_activity == ACTIVITY_INACTIVE && force_major)
{
// We are doing a GC because the system has been idle for a
@@ -1453,6 +1468,11 @@ delete_threads_and_gc:
recent_activity = ACTIVITY_YES;
}
+#if defined(THREADED_RTS)
+ // Stable point where we can do a global check on our spark counters
+ ASSERT(checkSparkCountInvariant());
+#endif
+
if (heap_census) {
debugTrace(DEBUG_sched, "performing heap census");
heapCensus();
@@ -1992,10 +2012,6 @@ initScheduler(void)
initTaskManager();
-#if defined(THREADED_RTS)
- initSparkPools();
-#endif
-
RELEASE_LOCK(&sched_mutex);
#if defined(THREADED_RTS)