diff options
| -rw-r--r-- | ghc/rts/ThreadLabels.c | 35 | ||||
| -rw-r--r-- | ghc/rts/ThreadLabels.h | 16 |
2 files changed, 51 insertions, 0 deletions
diff --git a/ghc/rts/ThreadLabels.c b/ghc/rts/ThreadLabels.c new file mode 100644 index 0000000000..fda40c3f00 --- /dev/null +++ b/ghc/rts/ThreadLabels.c @@ -0,0 +1,35 @@ + +#include "PosixSource.h" +#include "ThreadLabels.h" + +HashTable * threadLabels = NULL; + +void +initThreadLabelTable(void) +{ + ASSERT(threadLabels == NULL); + threadLabels = allocHashTable(); +} + +void +updateThreadLabel(StgWord key, void *data) +{ + removeThreadLabel(key); + insertHashTable(threadLabels,key,data); +} + +void * +lookupThreadLabel(StgWord key) +{ + return lookupHashTable(threadLabels,key); +} + +void +removeThreadLabel(StgWord key) +{ + void * old = NULL; + if ((old = lookupHashTable(threadLabels,key))) { + removeHashTable(threadLabels,key,old); + free(old); + } +} diff --git a/ghc/rts/ThreadLabels.h b/ghc/rts/ThreadLabels.h new file mode 100644 index 0000000000..46e060c992 --- /dev/null +++ b/ghc/rts/ThreadLabels.h @@ -0,0 +1,16 @@ +#include "Rts.h" +#include "Hash.h" + +extern HashTable * threadLabels; + +void +initThreadLabelTable(void); + +void +updateThreadLabel(StgWord key, void *data); + +void * +lookupThreadLabel(StgWord key); + +void +removeThreadLabel(StgWord key); |
