summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ghc/rts/ThreadLabels.c35
-rw-r--r--ghc/rts/ThreadLabels.h16
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);