[project @ 2002-02-12 15:34:25 by sof]
authorsof <unknown>
Tue, 12 Feb 2002 15:34:25 +0000 (15:34 +0000)
committersof <unknown>
Tue, 12 Feb 2002 15:34:25 +0000 (15:34 +0000)
- give rts_n_free_capabilities an interpretation
  in threaded mode (possible values: 0,1)
- noFreeCapabilities() -? noCapabilities()

ghc/rts/Capability.c
ghc/rts/Capability.h

index 78c10bf..d3eacd6 100644 (file)
@@ -26,6 +26,8 @@
 Capability MainCapability;     /* for non-SMP, we have one global capability */
 #endif
 
+nat rts_n_free_capabilities;
+
 static
 void
 initCapability( Capability *cap )
@@ -64,6 +66,7 @@ static Capability *free_capabilities; /* Available capabilities for running thre
 void grabCapability(Capability** cap)
 {
 #if !defined(SMP)
+  rts_n_free_capabilities = 0;
   *cap = &MainCapability;
 #else
   *cap = free_capabilities;
@@ -79,6 +82,7 @@ void releaseCapability(Capability* cap)
   free_capabilities = cap;
   rts_n_free_capabilities++;
 #endif
+  rts_n_free_capabilities = 1;
   return;
 }
 
index cecbc8b..e59f495 100644 (file)
@@ -32,7 +32,7 @@ extern void initCapabilities(void);
 extern void grabCapability(Capability** cap);
 extern void releaseCapability(Capability* cap);
 
-#if defined(SMP)
+#if defined(RTS_SUPPORTS_THREADS)
 extern nat rts_n_free_capabilities;  /* total number of available capabilities */
 
 static inline nat getFreeCapabilities()
@@ -40,16 +40,20 @@ static inline nat getFreeCapabilities()
   return rts_n_free_capabilities;
 }
 
-static inline rtsBool noFreeCapabilities()
+static inline rtsBool noCapabilities()
 {
   return (rts_n_free_capabilities == 0);
 }
 
 static inline rtsBool allFreeCapabilities()
 {
+# if defined(SMP)
   return (rts_n_free_capabilities == RtsFlags.ParFlags.nNodes);
+# else
+  return (rts_n_free_capabilities == 1);
+# endif 
 }
 
-#endif /* SMP */
+#endif /* RTS_SUPPORTS_THREADS */
 
 #endif /* __CAPABILITY_H__ */