-#include "RtsTypeable.h"
+/* -----------------------------------------------------------------------------
+ *
+ * (c) The GHC Team, 1995-2005
+ *
+ * Data.Typeable support
+ *
+ * ---------------------------------------------------------------------------*/
+
#include "Rts.h"
-\r
-static StgPtr typeableStore = 0;\r
-#ifdef THREADED_RTS\r
-Mutex typeableStoreLock;\r
-#endif\r
-\r
-\r
-void\r
-initTypeableStore()\r
-{\r
- typeableStore=0;\r
-#ifdef THREADED_RTS\r
- initMutex(&typeableStoreLock);\r
-#endif\r
-}\r
-\r
-void\r
-exitTypeableStore()\r
-{\r
-#ifdef THREADED_RTS\r
- /* TODO: Free Mutex! */\r
-#endif\r
- if(typeableStore!=0) {\r
- freeStablePtr((StgStablePtr)typeableStore);\r
- typeableStore=0;\r
- }\r
-}\r
-\r
-StgPtr\r
-getOrSetTypeableStore(StgPtr ptr)\r
-{\r
- StgPtr ret = typeableStore;\r
- if(ret==0) {\r
-#ifdef THREADED_RTS\r
- ACQUIRE_LOCK(&typeableStoreLock);\r
- ret=typeableStore;\r
- if(ret==0) {\r
-#endif\r
- typeableStore = ret = ptr;\r
-#ifdef THREADED_RTS\r
- }\r
- RELEASE_LOCK(&typeableStoreLock);\r
-#endif\r
- }\r
- return ret;\r
-}\r
+#include "RtsTypeable.h"
+
+static StgPtr typeableStore = 0;
+#ifdef THREADED_RTS
+Mutex typeableStoreLock;
+#endif
+
+
+void
+initTypeableStore()
+{
+ typeableStore=0;
+#ifdef THREADED_RTS
+ initMutex(&typeableStoreLock);
+#endif
+}
+
+void
+exitTypeableStore()
+{
+#ifdef THREADED_RTS
+ closeMutex(&typeableStoreLock);
+#endif
+ if(typeableStore!=0) {
+ freeStablePtr((StgStablePtr)typeableStore);
+ typeableStore=0;
+ }
+}
+
+StgPtr
+getOrSetTypeableStore(StgPtr ptr)
+{
+ StgPtr ret = typeableStore;
+ if(ret==0) {
+#ifdef THREADED_RTS
+ ACQUIRE_LOCK(&typeableStoreLock);
+ ret=typeableStore;
+ if(ret==0) {
+#endif
+ typeableStore = ret = ptr;
+#ifdef THREADED_RTS
+ }
+ RELEASE_LOCK(&typeableStoreLock);
+#endif
+ }
+ return ret;
+}