[project @ 2004-11-09 18:04:15 by sof]
[ghc-hetmet.git] / ghc / rts / PrimOps.cmm
index d4a54c6..9f69d16 100644 (file)
@@ -316,6 +316,7 @@ finalizzeWeakzh_fast
   LDV_RECORD_CREATE(w);
 
   f = StgWeak_finalizer(w);
+  StgDeadWeak_link(w) = StgWeak_link(w);
 
   /* return the finalizer */
   if (f == stg_NO_FINALIZER_closure) {
@@ -1341,6 +1342,10 @@ mkApUpd0zh_fast
 waitReadzh_fast
 {
     /* args: R1 */
+#ifdef THREADED_RTS
+    foreign "C" barf("waitRead# on threaded RTS");
+#endif
+
     ASSERT(StgTSO_why_blocked(CurrentTSO) == NotBlocked::I16);
     StgTSO_why_blocked(CurrentTSO) = BlockedOnRead::I16;
     StgTSO_block_info(CurrentTSO) = R1;
@@ -1353,6 +1358,10 @@ waitReadzh_fast
 waitWritezh_fast
 {
     /* args: R1 */
+#ifdef THREADED_RTS
+    foreign "C" barf("waitWrite# on threaded RTS");
+#endif
+
     ASSERT(StgTSO_why_blocked(CurrentTSO) == NotBlocked::I16);
     StgTSO_why_blocked(CurrentTSO) = BlockedOnWrite::I16;
     StgTSO_block_info(CurrentTSO) = R1;
@@ -1373,6 +1382,10 @@ delayzh_fast
     W_ t, prev, target;
 #endif
 
+#ifdef THREADED_RTS
+    foreign "C" barf("delay# on threaded RTS");
+#endif
+
     /* args: R1 (microsecond delay amount) */
     ASSERT(StgTSO_why_blocked(CurrentTSO) == NotBlocked::I16);
     StgTSO_why_blocked(CurrentTSO) = BlockedOnDelay::I16;
@@ -1394,6 +1407,7 @@ delayzh_fast
      */
     StgTSO_why_blocked(CurrentTSO) = BlockedOnDoProc::I16;
     APPEND_TO_BLOCKED_QUEUE(CurrentTSO);
+    jump stg_block_async_void;
 
 #else
 
@@ -1418,9 +1432,8 @@ while:
     } else {
        StgTSO_link(prev) = CurrentTSO;
     }
-#endif
-
     jump stg_block_noregs;
+#endif
 }
 
 
@@ -1431,6 +1444,10 @@ asyncReadzh_fast
     W_ ares;
     CInt reqID;
 
+#ifdef THREADED_RTS
+    foreign "C" barf("asyncRead# on threaded RTS");
+#endif
+
     /* args: R1 = fd, R2 = isSock, R3 = len, R4 = buf */
     ASSERT(StgTSO_why_blocked(CurrentTSO) == NotBlocked::I16);
     StgTSO_why_blocked(CurrentTSO) = BlockedOnRead::I16;
@@ -1453,6 +1470,10 @@ asyncWritezh_fast
     W_ ares;
     CInt reqID;
 
+#ifdef THREADED_RTS
+    foreign "C" barf("asyncWrite# on threaded RTS");
+#endif
+
     /* args: R1 = fd, R2 = isSock, R3 = len, R4 = buf */
     ASSERT(StgTSO_why_blocked(CurrentTSO) == NotBlocked::I16);
     StgTSO_why_blocked(CurrentTSO) = BlockedOnWrite::I16;