[project @ 2002-10-01 15:58:42 by erkok]
[ghc-hetmet.git] / ghc / rts / RtsAPI.c
index e01a559..7449bad 100644 (file)
@@ -1,5 +1,5 @@
 /* ----------------------------------------------------------------------------
- * $Id: RtsAPI.c,v 1.33 2002/02/15 07:40:10 sof Exp $
+ * $Id: RtsAPI.c,v 1.36 2002/08/16 14:30:21 simonmar Exp $
  *
  * (c) The GHC Team, 1998-2001
  *
 #include "OSThreads.h"
 #include "Schedule.h"
 
-#if defined(THREADED_RTS)
-#define WAIT_MAIN_THREAD(tso,ret) waitThread_(tso,ret,rtsFalse)
-#else
-#define WAIT_MAIN_THREAD(tso,ret) waitThread(tso,ret)
-#endif
-
 #if defined(RTS_SUPPORTS_THREADS)
 /* Cheesy locking scheme while waiting for the 
  * RTS API to change.
@@ -238,12 +232,13 @@ rts_mkString (char *s)
 HaskellObj
 rts_apply (HaskellObj f, HaskellObj arg)
 {
-  StgAP_UPD *ap = (StgAP_UPD *)alloc(AP_sizeW(1));
-  SET_HDR(ap, &stg_AP_UPD_info, CCS_SYSTEM);
-  ap->n_args = 1;
-  ap->fun    = f;
-  ap->payload[0] = arg;
-  return (StgClosure *)ap;
+    StgClosure *ap;
+
+    ap = (StgClosure *)alloc(sizeofW(StgClosure) + 2);
+    SET_HDR(ap, (StgInfoTable *)&stg_ap_2_upd_info, CCS_SYSTEM);
+    ap->payload[0] = f;
+    ap->payload[1] = arg;
+    return (StgClosure *)ap;
 }
 
 /* ----------------------------------------------------------------------------
@@ -453,8 +448,7 @@ rts_eval (HaskellObj p, /*out*/HaskellObj *ret)
 
     tso = createGenThread(RtsFlags.GcFlags.initialStkSize, p);
     releaseAllocLock();
-    scheduleExtThread(tso);
-    return waitThread(tso, ret);
+    return scheduleWaitThread(tso,ret);
 }
 
 SchedulerStatus
@@ -464,8 +458,7 @@ rts_eval_ (HaskellObj p, unsigned int stack_size, /*out*/HaskellObj *ret)
     
     tso = createGenThread(stack_size, p);
     releaseAllocLock();
-    scheduleExtThread(tso);
-    return waitThread(tso, ret);
+    return scheduleWaitThread(tso,ret);
 }
 
 /*
@@ -479,8 +472,7 @@ rts_evalIO (HaskellObj p, /*out*/HaskellObj *ret)
     
     tso = createStrictIOThread(RtsFlags.GcFlags.initialStkSize, p);
     releaseAllocLock();
-    scheduleExtThread(tso);
-    return waitThread(tso, ret);
+    return scheduleWaitThread(tso,ret);
 }
 
 /*
@@ -495,7 +487,7 @@ rts_mainEvalIO(HaskellObj p, /*out*/HaskellObj *ret)
     tso = createStrictIOThread(RtsFlags.GcFlags.initialStkSize, p);
     releaseAllocLock();
     scheduleThread(tso);
-    return WAIT_MAIN_THREAD(tso, ret);
+    return waitThread(tso, ret);
 }
 
 /*
@@ -514,8 +506,7 @@ rts_evalStableIO (HsStablePtr s, /*out*/HsStablePtr *ret)
     p = (StgClosure *)deRefStablePtr(s);
     tso = createStrictIOThread(RtsFlags.GcFlags.initialStkSize, p);
     releaseAllocLock();
-    scheduleExtThread(tso);
-    stat = waitThread(tso, &r);
+    stat = scheduleWaitThread(tso,&r);
 
     if (stat == Success) {
        ASSERT(r != NULL);
@@ -535,8 +526,7 @@ rts_evalLazyIO (HaskellObj p, unsigned int stack_size, /*out*/HaskellObj *ret)
 
     tso = createIOThread(stack_size, p);
     releaseAllocLock();
-    scheduleExtThread(tso);
-    return waitThread(tso, ret);
+    return scheduleWaitThread(tso,ret);
 }
 
 /* Convenience function for decoding the returned status. */