mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-09-21 21:44:58 +02:00
prop250: Sort smartlist before you get most frequent SRV.
Signed-off-by: David Goulet <dgoulet@torproject.org>
This commit is contained in:
parent
545b77e2f8
commit
edea044147
@ -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);
|
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
|
/* 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
|
* 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
|
* 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_add(srv_list, srv_tmp);
|
||||||
} SMARTLIST_FOREACH_END(v);
|
} SMARTLIST_FOREACH_END(v);
|
||||||
|
|
||||||
|
smartlist_sort(srv_list, compare_srv_);
|
||||||
most_frequent_srv = smartlist_get_most_frequent_srv(srv_list, &count);
|
most_frequent_srv = smartlist_get_most_frequent_srv(srv_list, &count);
|
||||||
if (!most_frequent_srv) {
|
if (!most_frequent_srv) {
|
||||||
goto end;
|
goto end;
|
||||||
|
@ -844,7 +844,7 @@ test_sr_get_majority_srv_from_votes(void *arg)
|
|||||||
{ /* Now put in 8 more votes. Let SRV_1 have majority. */
|
{ /* Now put in 8 more votes. Let SRV_1 have majority. */
|
||||||
int i;
|
int i;
|
||||||
/* Now 7 votes believe in SRV_1 */
|
/* Now 7 votes believe in SRV_1 */
|
||||||
for (i = 0; i < 6; i++) {
|
for (i = 0; i < 3; i++) {
|
||||||
networkstatus_t *vote = get_test_vote_with_curr_srv(SRV_1);
|
networkstatus_t *vote = get_test_vote_with_curr_srv(SRV_1);
|
||||||
smartlist_add(votes, vote);
|
smartlist_add(votes, vote);
|
||||||
}
|
}
|
||||||
@ -853,6 +853,10 @@ test_sr_get_majority_srv_from_votes(void *arg)
|
|||||||
networkstatus_t *vote = get_test_vote_with_curr_srv(SRV_2);
|
networkstatus_t *vote = get_test_vote_with_curr_srv(SRV_2);
|
||||||
smartlist_add(votes, vote);
|
smartlist_add(votes, vote);
|
||||||
}
|
}
|
||||||
|
for (i = 0; i < 3; i++) {
|
||||||
|
networkstatus_t *vote = get_test_vote_with_curr_srv(SRV_1);
|
||||||
|
smartlist_add(votes, vote);
|
||||||
|
}
|
||||||
|
|
||||||
tt_int_op(smartlist_len(votes), ==, 9);
|
tt_int_op(smartlist_len(votes), ==, 9);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user