diff options
Diffstat (limited to 'src/or/shared_random.c')
-rw-r--r-- | src/or/shared_random.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/or/shared_random.c b/src/or/shared_random.c index d409d109ac..c5a62a754a 100644 --- a/src/or/shared_random.c +++ b/src/or/shared_random.c @@ -779,6 +779,15 @@ smartlist_get_most_frequent_srv(const smartlist_t *sl, int *count_out) return smartlist_get_most_frequent_(sl, compare_srvs_, count_out); } +/** Compare two SRVs. Used in smartlist sorting. */ +static int +compare_srv_(const void **_a, const void **_b) +{ + const sr_srv_t *a = *_a, *b = *_b; + return fast_memcmp(a->value, b->value, + sizeof(a->value)); +} + /* Using a list of <b>votes</b>, return the SRV object from them that has * been voted by the majority of dirauths. If <b>current</b> is set, we look * for the current SRV value else the previous one. The returned pointer is @@ -813,6 +822,7 @@ get_majority_srv_from_votes(const smartlist_t *votes, int current) smartlist_add(srv_list, srv_tmp); } SMARTLIST_FOREACH_END(v); + smartlist_sort(srv_list, compare_srv_); most_frequent_srv = smartlist_get_most_frequent_srv(srv_list, &count); if (!most_frequent_srv) { goto end; |