CNF: Silence pointer fix-up message unless gc debugging is enabled
[ghc.git] / rts / Stable.h
index b1b25ff..399a2b3 100644 (file)
  *
  * ---------------------------------------------------------------------------*/
 
-#ifndef STABLE_H
-#define STABLE_H
+#pragma once
 
 #include "sm/GC.h" // for evac_fn below
 
-#pragma GCC visibility push(hidden)
+#include "BeginPrivate.h"
 
 void    freeStablePtr         ( StgStablePtr sp );
 
-void    initStablePtrTable    ( void );
-void    exitStablePtrTable    ( void );
+/* Use the "Unsafe" one after manually locking with stableLock/stableUnlock */
+void    freeStablePtrUnsafe   ( StgStablePtr sp );
+
+void    initStableTables      ( void );
+void    exitStableTables      ( void );
 StgWord lookupStableName      ( StgPtr p );
 
-void    markStablePtrTable    ( evac_fn evac, void *user );
-void    threadStablePtrTable  ( evac_fn evac, void *user );
-void    gcStablePtrTable      ( void );
-void    updateStablePtrTable  ( rtsBool full );
+/* Call given function on every stable ptr. markStableTables depends
+ * on the function updating its pointers in case the object is
+ * moved. */
+/* TODO: This also remembers old stable name addresses, which isn't
+ * necessary in some contexts markStableTables is called from.
+ * Consider splitting it.
+ */
+void    markStableTables      ( evac_fn evac, void *user );
+
+void    threadStableTables    ( evac_fn evac, void *user );
+void    gcStableTables        ( void );
+void    updateStableTables    ( bool full );
 
-void    stablePtrPreGC        ( void );
-void    stablePtrPostGC       ( void );
+void    stableLock            ( void );
+void    stableUnlock          ( void );
 
-#pragma GCC visibility pop
+#if defined(THREADED_RTS)
+// needed by Schedule.c:forkProcess()
+extern Mutex stable_mutex;
+#endif
 
-#endif /* STABLE_H */
+#include "EndPrivate.h"