From 92f068f6957e1c9ac828612ca6852592101c3417 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Fri, 7 Feb 2020 15:11:40 -0500 Subject: [PATCH] Use global pointer instead of string --- runtime.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/runtime.c b/runtime.c index 43875725..884b7520 100644 --- a/runtime.c +++ b/runtime.c @@ -308,21 +308,21 @@ static bool set_insert(ck_hs_t * hs, const void *value) // New set of hashset functions that store non-relocated objects static void ht_hash_wrapper(struct ck_ht_hash *h, const void *key, size_t length, uint64_t seed) { - h->value = (unsigned long)MurmurHash64A(key, length, seed); + h->value = (uintptr_t)key; return; } static void *ht_get(ck_ht_t * ht, const void *key) { void *v; - int len = strlen(key); + int len = sizeof(key); ck_ht_hash_t h; ck_ht_entry_t entry; ck_ht_hash(&h, ht, key, len); ck_ht_entry_key_set(&entry, key, len); if (!ck_ht_get_spmc(ht, h, &entry)) { - fprintf(stderr, "Unable to retrieve hash table value for key %s\n", (char *)key); + fprintf(stderr, "Unable to retrieve hash table value for key %p\n", key); exit(1); } v = (void *)entry.value; @@ -331,7 +331,7 @@ static void *ht_get(ck_ht_t * ht, const void *key) static bool ht_insert(ck_ht_t * ht, const void *key, const void *value) { - int len = strlen(key); + int len = sizeof(key); ck_ht_hash_t h; ck_ht_entry_t entry; @@ -430,7 +430,7 @@ object Cyc_global_set_cps(void *thd, object cont, object identifier, object * gl if (do_gc) { // Ensure global is a root. We need to do this here to ensure // global and all its children are relocated to the heap. - object cv = ht_get(&globals_ht, identifier); + object cv = ht_get(&globals_ht, glo); gc_thread_data *data = (gc_thread_data *) thd; data->mutations = vpbuffer_add(data->mutations, &(data->mutation_buflen), @@ -572,7 +572,11 @@ void add_global(const char *identifier, object * glo) global_table = malloc_make_pair(mcvar(glo), global_table); pthread_mutex_lock(&symbol_table_lock); // Only 1 "writer" allowed - ht_insert(&globals_ht, identifier, car(global_table)); + if (!ht_insert(&globals_ht, glo, car(global_table))) + { + fprintf(stderr, "Error inserting global hash table %p\n", glo); + exit(1); + } pthread_mutex_unlock(&symbol_table_lock); }