Make allocatePinned use local storage, and other refactorings
[ghc-hetmet.git] / rts / Threads.c
index 1d871a5..9867c1c 100644 (file)
@@ -8,10 +8,8 @@
 
 #include "PosixSource.h"
 #include "Rts.h"
-#include "SchedAPI.h"
-#include "Storage.h"
+
 #include "Threads.h"
-#include "RtsFlags.h"
 #include "STM.h"
 #include "Schedule.h"
 #include "Trace.h"
@@ -65,7 +63,7 @@ createThread(Capability *cap, nat size)
     }
 
     size = round_to_mblocks(size);
-    tso = (StgTSO *)allocateLocal(cap, size);
+    tso = (StgTSO *)allocate(cap, size);
 
     stack_size = size - TSO_STRUCT_SIZEW;
     TICK_ALLOC_TSO(stack_size, 0);
@@ -77,7 +75,8 @@ createThread(Capability *cap, nat size)
 
     tso->why_blocked  = NotBlocked;
     tso->blocked_exceptions = END_TSO_QUEUE;
-    tso->flags = TSO_DIRTY;
+    tso->flags = 0;
+    tso->dirty = 1;
     
     tso->saved_errno = 0;
     tso->bound = NULL;
@@ -103,15 +102,13 @@ createThread(Capability *cap, nat size)
      */
     ACQUIRE_LOCK(&sched_mutex);
     tso->id = next_thread_id++;  // while we have the mutex
-    tso->global_link = g0s0->threads;
-    g0s0->threads = tso;
+    tso->global_link = cap->r.rNursery->threads;
+    cap->r.rNursery->threads = tso;
     RELEASE_LOCK(&sched_mutex);
     
-    postEvent (cap, EVENT_CREATE_THREAD, tso->id, 0);
+    // ToDo: report the stack size in the event?
+    traceSchedEvent (cap, EVENT_CREATE_THREAD, tso, tso->stack_size);
 
-    debugTrace(DEBUG_sched,
-              "created thread %ld, stack size = %lx words", 
-              (long)tso->id, (long)tso->stack_size);
     return tso;
 }
 
@@ -257,10 +254,7 @@ unblockOne_ (Capability *cap, StgTSO *tso,
   cap->context_switch = 1;
 #endif
 
-  postEvent (cap, EVENT_THREAD_WAKEUP, tso->id, tso->cap->no);
-
-  debugTrace(DEBUG_sched, "waking up thread %ld on cap %d",
-            (long)tso->id, tso->cap->no);
+  traceSchedEvent (cap, EVENT_THREAD_WAKEUP, tso, tso->cap->no);
 
   return next;
 }
@@ -358,6 +352,7 @@ printThreadBlockage(StgTSO *tso)
   }
 }
 
+
 void
 printThreadStatus(StgTSO *t)
 {
@@ -379,7 +374,7 @@ printThreadStatus(StgTSO *t)
        default:
            printThreadBlockage(t);
        }
-        if (t->flags & TSO_DIRTY) {
+        if (t->dirty) {
             debugBelch(" (TSO_DIRTY)");
         } else if (t->flags & TSO_LINK_DIRTY) {
             debugBelch(" (TSO_LINK_DIRTY)");