X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=rts%2FTypeable.c;h=88151b7d4743b70e63acca360f49d0a7ee5f8068;hp=e07c764c55362bc6a27215d58f8dbe72c84ff23b;hb=4c6a3f787abcaed009a574196d82237d9ae64fc8;hpb=52589e05f86d593bc3e6ea3f1a0b8f6ceae94fe6 diff --git a/rts/Typeable.c b/rts/Typeable.c index e07c764..88151b7 100644 --- a/rts/Typeable.c +++ b/rts/Typeable.c @@ -1,48 +1,56 @@ -#include "RtsTypeable.h" +/* ----------------------------------------------------------------------------- + * + * (c) The GHC Team, 1995-2005 + * + * Data.Typeable support + * + * ---------------------------------------------------------------------------*/ + #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 - /* TODO: Free Mutex! */ -#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; -} +#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; +}