X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=rts%2FTypeable.c;h=66e135ca1f9a26c30365fab79d72e086170d7a83;hp=4c4d460d667147f3999906136157548447cb98de;hb=8a2809c29de9f23eba7ca682b48390033a9d40f6;hpb=88b35c172f9434fd98b700f706074d142914a8bb diff --git a/rts/Typeable.c b/rts/Typeable.c index 4c4d460..66e135c 100644 --- a/rts/Typeable.c +++ b/rts/Typeable.c @@ -1,48 +1,56 @@ +/* ----------------------------------------------------------------------------- + * + * (c) The GHC Team, 1995-2005 + * + * Data.Typeable support + * + * ---------------------------------------------------------------------------*/ + #include "RtsTypeable.h" #include "Rts.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; -} + +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; +}