Skip to content

Commit

Permalink
Optimise bfd_get_random_discr
Browse files Browse the repository at this point in the history
Signed-off-by: Quentin Armitage <quentin@armitage.org.uk>
  • Loading branch information
pqarmitage committed Dec 29, 2017
1 parent 04a123c commit bf53510
Showing 1 changed file with 13 additions and 9 deletions.
22 changes: 13 additions & 9 deletions keepalived/bfd/bfd_data.c
Expand Up @@ -276,22 +276,26 @@ rand_intv(uint32_t min, uint32_t max)

/* Returns random disciminator number */
uint32_t
bfd_get_random_discr(bfd_data_t * data)
bfd_get_random_discr(bfd_data_t *data)
{
bfd_t *bfd;
uint32_t discr;
element e;

assert(data);

discr = rand_intv(1, UINT32_MAX);

/* Check for collisions */
for (e = LIST_HEAD(data->bfd); e; ELEMENT_NEXT(e)) {
bfd = ELEMENT_DATA(e);
if (bfd->local_discr == discr)
return bfd_get_random_discr(data);
}
do {
discr = rand_intv(1, UINT32_MAX);

/* Check for collisions */
for (e = LIST_HEAD(data->bfd); e; ELEMENT_NEXT(e)) {
bfd = ELEMENT_DATA(e);
if (bfd->local_discr == discr) {
discr = 0;
break;
}
}
} while (!discr);

return discr;
}

0 comments on commit bf53510

Please sign in to comment.