Adding TcGadt.lhs
[ghc-hetmet.git] / rts / Typeable.c
1 #include "RtsTypeable.h"
2 #include "Rts.h"
3 \r
4 static StgPtr typeableStore = 0;\r
5 #ifdef THREADED_RTS\r
6 Mutex typeableStoreLock;\r
7 #endif\r
8 \r
9 \r
10 void\r
11 initTypeableStore()\r
12 {\r
13     typeableStore=0;\r
14 #ifdef THREADED_RTS\r
15     initMutex(&typeableStoreLock);\r
16 #endif\r
17 }\r
18 \r
19 void\r
20 exitTypeableStore()\r
21 {\r
22 #ifdef THREADED_RTS\r
23     closeMutex(&typeableStoreLock);\r
24 #endif\r
25     if(typeableStore!=0) {\r
26         freeStablePtr((StgStablePtr)typeableStore);\r
27         typeableStore=0;\r
28     }\r
29 }\r
30 \r
31 StgPtr\r
32 getOrSetTypeableStore(StgPtr ptr)\r
33 {\r
34     StgPtr ret = typeableStore;\r
35     if(ret==0) {\r
36 #ifdef THREADED_RTS\r
37         ACQUIRE_LOCK(&typeableStoreLock);\r
38         ret=typeableStore;\r
39         if(ret==0) {\r
40 #endif\r
41             typeableStore = ret = ptr;\r
42 #ifdef THREADED_RTS\r
43         }\r
44         RELEASE_LOCK(&typeableStoreLock);\r
45 #endif\r
46     }\r
47     return ret;\r
48 }\r