aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/core/statistics/hash_table.c6
-rw-r--r--test/core/statistics/hash_table_test.c14
2 files changed, 16 insertions, 4 deletions
diff --git a/src/core/statistics/hash_table.c b/src/core/statistics/hash_table.c
index f0105ee683..1aee86d3a4 100644
--- a/src/core/statistics/hash_table.c
+++ b/src/core/statistics/hash_table.c
@@ -141,10 +141,10 @@ static gpr_int32 find_bucket_idx(const census_ht* ht, census_ht_key key) {
static int keys_match(const census_ht_option* opt, const ht_entry* p,
const census_ht_key key) {
+ GPR_ASSERT(opt->key_type == CENSUS_HT_UINT64 ||
+ opt->key_type == CENSUS_HT_POINTER);
if (opt->key_type == CENSUS_HT_UINT64) return p->key.val == key.val;
- if (opt->key_type == CENSUS_HT_POINTER)
- return !opt->compare_keys((p->key).ptr, key.ptr);
- return 0;
+ return !opt->compare_keys((p->key).ptr, key.ptr);
}
static entry_locator ht_find(const census_ht* ht, census_ht_key key) {
diff --git a/test/core/statistics/hash_table_test.c b/test/core/statistics/hash_table_test.c
index fb75de520e..8c76824193 100644
--- a/test/core/statistics/hash_table_test.c
+++ b/test/core/statistics/hash_table_test.c
@@ -123,7 +123,8 @@ static void test_value_and_key_deleter() {
&free_data, &free_data};
census_ht* ht = census_ht_create(&opt);
census_ht_key key;
- char* val;
+ char* val = NULL;
+ char* val2 = NULL;
key.ptr = gpr_malloc(100);
val = gpr_malloc(10);
strcpy(val, "value");
@@ -132,6 +133,17 @@ static void test_value_and_key_deleter() {
GPR_ASSERT(census_ht_get_size(ht) == 0);
census_ht_insert(ht, key, val);
GPR_ASSERT(census_ht_get_size(ht) == 1);
+ val = census_ht_find(ht, key);
+ GPR_ASSERT(val != NULL);
+ GPR_ASSERT(strcmp(val, "value") == 0);
+ /* Insert same key different value, old value is overwritten. */
+ val2 = gpr_malloc(10);
+ strcpy(val2, "v2");
+ census_ht_insert(ht, key, val2);
+ GPR_ASSERT(census_ht_get_size(ht) == 1);
+ val2 = census_ht_find(ht, key);
+ GPR_ASSERT(val2 != NULL);
+ GPR_ASSERT(strcmp(val2, "v2") == 0);
census_ht_destroy(ht);
}