add Outputable instance for OccIfaceEq
[ghc-hetmet.git] / rts / PrimOps.cmm
index 04a753c..373f192 100644 (file)
@@ -920,6 +920,12 @@ forkzh_fast
   ("ptr" threadid) = foreign "C" createIOThread( MyCapability() "ptr", 
                                RtsFlags_GcFlags_initialStkSize(RtsFlags), 
                                closure "ptr") [];
+
+  /* start blocked if the current thread is blocked */
+  StgTSO_flags(threadid) = 
+     StgTSO_flags(threadid) |  (StgTSO_flags(CurrentTSO) & 
+                                (TSO_BLOCKEX::I32 | TSO_INTERRUPTIBLE::I32));
+
   foreign "C" scheduleThread(MyCapability() "ptr", threadid "ptr") [];
 
   // switch at the earliest opportunity
@@ -943,6 +949,12 @@ forkOnzh_fast
   ("ptr" threadid) = foreign "C" createIOThread( MyCapability() "ptr", 
                                RtsFlags_GcFlags_initialStkSize(RtsFlags), 
                                closure "ptr") [];
+
+  /* start blocked if the current thread is blocked */
+  StgTSO_flags(threadid) = 
+     StgTSO_flags(threadid) |  (StgTSO_flags(CurrentTSO) & 
+                                (TSO_BLOCKEX::I32 | TSO_INTERRUPTIBLE::I32));
+
   foreign "C" scheduleThreadOn(MyCapability() "ptr", cpu, threadid "ptr") [];
 
   // switch at the earliest opportunity
@@ -1498,7 +1510,7 @@ takeMVarzh_fast
 #endif
         
     if (info == stg_MVAR_CLEAN_info) {
-        foreign "C" dirty_MVAR(BaseReg "ptr", mvar);
+        foreign "C" dirty_MVAR(BaseReg "ptr", mvar "ptr");
     }
 
     /* If the MVar is empty, put ourselves on its blocking queue,
@@ -1595,7 +1607,7 @@ tryTakeMVarzh_fast
     }
 
     if (info == stg_MVAR_CLEAN_info) {
-        foreign "C" dirty_MVAR(BaseReg "ptr", mvar);
+        foreign "C" dirty_MVAR(BaseReg "ptr", mvar "ptr");
     }
 
     /* we got the value... */
@@ -1661,7 +1673,7 @@ putMVarzh_fast
 #endif
 
     if (info == stg_MVAR_CLEAN_info) {
-        foreign "C" dirty_MVAR(BaseReg "ptr", mvar);
+        foreign "C" dirty_MVAR(BaseReg "ptr", mvar "ptr");
     }
 
     if (StgMVar_value(mvar) != stg_END_TSO_QUEUE_closure) {
@@ -1747,7 +1759,7 @@ tryPutMVarzh_fast
     }
   
     if (info == stg_MVAR_CLEAN_info) {
-        foreign "C" dirty_MVAR(BaseReg "ptr", mvar);
+        foreign "C" dirty_MVAR(BaseReg "ptr", mvar "ptr");
     }
 
     if (StgMVar_head(mvar) != stg_END_TSO_QUEUE_closure) {