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