Add GMP_INCLUDE_DIRS in a couple of places
[ghc-hetmet.git] / rts / Schedule.c
index 22e6120..3a45495 100644 (file)
@@ -2143,6 +2143,7 @@ forkProcess(HsStablePtr *entry
     // inconsistent state in the child.  See also #1391.
     ACQUIRE_LOCK(&sched_mutex);
     ACQUIRE_LOCK(&cap->lock);
+    ACQUIRE_LOCK(&cap->running_task->lock);
 
     pid = fork();
     
@@ -2150,6 +2151,7 @@ forkProcess(HsStablePtr *entry
        
         RELEASE_LOCK(&sched_mutex);
         RELEASE_LOCK(&cap->lock);
+        RELEASE_LOCK(&cap->running_task->lock);
 
        // just return the pid
        rts_unlock(cap);
@@ -2160,6 +2162,7 @@ forkProcess(HsStablePtr *entry
 #if defined(THREADED_RTS)
         initMutex(&sched_mutex);
         initMutex(&cap->lock);
+        initMutex(&cap->running_task->lock);
 #endif
 
        // Now, all OS threads except the thread that forked are
@@ -2199,6 +2202,9 @@ forkProcess(HsStablePtr *entry
        ACQUIRE_LOCK(&sched_mutex);
        for (task = all_tasks; task != NULL; task=task->all_link) {
            if (task != cap->running_task) {
+#if defined(THREADED_RTS)
+                initMutex(&task->lock); // see #1391
+#endif
                discardTask(task);
            }
        }
@@ -2831,7 +2837,7 @@ threadStackOverflow(Capability *cap, StgTSO *tso)
             "increasing stack size from %ld words to %d.",
             (long)tso->stack_size, new_stack_size);
 
-  dest = (StgTSO *)allocate(new_tso_size);
+  dest = (StgTSO *)allocateLocal(cap,new_tso_size);
   TICK_ALLOC_TSO(new_stack_size,0);
 
   /* copy the TSO block and the old stack into the new area */
@@ -2943,7 +2949,7 @@ checkBlackHoles (Capability *cap)
     t = blackhole_queue;
     while (t != END_TSO_QUEUE) {
        ASSERT(t->why_blocked == BlockedOnBlackHole);
-       type = get_itbl(t->block_info.closure)->type;
+       type = get_itbl(UNTAG_CLOSURE(t->block_info.closure))->type;
        if (type != BLACKHOLE && type != CAF_BLACKHOLE) {
            IF_DEBUG(sanity,checkTSO(t));
            t = unblockOne(cap, t);