[project @ 2002-04-13 05:28:04 by sof]
authorsof <unknown>
Sat, 13 Apr 2002 05:28:04 +0000 (05:28 +0000)
committersof <unknown>
Sat, 13 Apr 2002 05:28:04 +0000 (05:28 +0000)
entry points that scheduled/created an external thread weren't correctly blocking on the TSO condition variable; now fixed.

ghc/rts/RtsAPI.c

index e01a559..cd0ef4c 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.34 2002/04/13 05:28:04 sof Exp $
  *
  * (c) The GHC Team, 1998-2001
  *
 
 #if defined(THREADED_RTS)
 #define WAIT_MAIN_THREAD(tso,ret) waitThread_(tso,ret,rtsFalse)
+#define WAIT_EXT_THREAD(tso,ret) waitThread_(tso,ret,rtsTrue)
 #else
 #define WAIT_MAIN_THREAD(tso,ret) waitThread(tso,ret)
+#define WAIT_EXT_THREAD(tso,ret) waitThread(tso,ret)
 #endif
 
 #if defined(RTS_SUPPORTS_THREADS)
@@ -454,7 +456,7 @@ rts_eval (HaskellObj p, /*out*/HaskellObj *ret)
     tso = createGenThread(RtsFlags.GcFlags.initialStkSize, p);
     releaseAllocLock();
     scheduleExtThread(tso);
-    return waitThread(tso, ret);
+    return WAIT_EXT_THREAD(tso, ret);
 }
 
 SchedulerStatus
@@ -465,7 +467,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 WAIT_EXT_THREAD(tso, ret);
 }
 
 /*
@@ -480,7 +482,7 @@ rts_evalIO (HaskellObj p, /*out*/HaskellObj *ret)
     tso = createStrictIOThread(RtsFlags.GcFlags.initialStkSize, p);
     releaseAllocLock();
     scheduleExtThread(tso);
-    return waitThread(tso, ret);
+    return WAIT_EXT_THREAD(tso, ret);
 }
 
 /*
@@ -515,7 +517,7 @@ rts_evalStableIO (HsStablePtr s, /*out*/HsStablePtr *ret)
     tso = createStrictIOThread(RtsFlags.GcFlags.initialStkSize, p);
     releaseAllocLock();
     scheduleExtThread(tso);
-    stat = waitThread(tso, &r);
+    stat = WAIT_EXT_THREAD(tso, &r);
 
     if (stat == Success) {
        ASSERT(r != NULL);
@@ -536,7 +538,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 WAIT_EXT_THREAD(tso, ret);
 }
 
 /* Convenience function for decoding the returned status. */