mirror of
https://git.openldap.org/openldap/openldap.git
synced 2026-01-06 06:59:54 -05:00
ITS#8204 Remove bias towards the first record in RFC2782 shuffle implementation.
Prior to this change, given two records of weight 1 the algorithm would return them in the order (0,1) with 100% probability instead of the desired 50%. This was due to an off-by-one error in the range test. srv_rand() returns a float in the range [0.0, 1.0[, so r is an integer in the range [0, total[. The correct probability for record 0 to be chosen is a[0].weight/total, not (a[0].weight+1)/total.
This commit is contained in:
parent
799607231d
commit
ee7502accd
1 changed files with 1 additions and 1 deletions
|
|
@ -234,7 +234,7 @@ static void srv_shuffle(srv_record *a, int n) {
|
|||
r = srv_rand() * total;
|
||||
for (j=0; j<p; j++) {
|
||||
r -= a[j].weight;
|
||||
if (r <= 0) {
|
||||
if (r < 0) {
|
||||
if (j) {
|
||||
srv_record t = a[0];
|
||||
a[0] = a[j];
|
||||
|
|
|
|||
Loading…
Reference in a new issue