Add CHECK(p), like ASSERT(p) but works even when !defined(DEBUG)
[ghc-hetmet.git] / includes / RtsAPI.h
index 54fa3ee..5160046 100644 (file)
@@ -22,7 +22,8 @@ typedef enum {
     NoStatus,    /* not finished yet */
     Success,    /* completed successfully */
     Killed,     /* uncaught exception */
-    Interrupted  /* stopped in response to a call to interruptStgRts */
+    Interrupted, /* stopped in response to a call to interruptStgRts */
+    HeapExhausted /* out of memory */
 } SchedulerStatus;
 
 typedef StgClosure *HaskellObj;
@@ -45,6 +46,10 @@ extern void setProgArgv            ( int argc, char *argv[] );
 extern void getFullProgArgv        ( int *argc, char **argv[] );
 extern void setFullProgArgv        ( int argc, char *argv[] );
 
+#ifndef mingw32_HOST_OS
+extern void shutdownHaskellAndSignal (int sig);
+#endif
+
 /* exit() override */
 extern void (*exitFn)(int);
 
@@ -61,6 +66,15 @@ Capability *rts_lock (void);
 // releases the token acquired with rts_lock().
 void rts_unlock (Capability *token);
 
+// If you are in a context where you know you have a current capability but
+// do not know what it is, then use this to get it. Basically this only
+// applies to "unsafe" foreign calls (as unsafe foreign calls are made with
+// the capability held).
+//
+// WARNING: There is *no* guarantee this returns anything sensible (eg NULL)
+// when there is no current capability.
+Capability *rts_unsafeGetMyCapability (void);
+
 /* ----------------------------------------------------------------------------
    Building Haskell objects from C datatypes.
    ------------------------------------------------------------------------- */