This is an automated email from the git hooks/post-receive script.
mreynolds pushed a commit to branch master
in repository 389-ds-base.
commit 12e9f149cdf62fcd86d2ffaf0f1c65958923af76
Author: William Brown <firstyear(a)redhat.com>
Date: Fri Sep 1 15:06:02 2017 +1000
Ticket 49354 - fix regression in totinit due to mistake in range fetch
Bug Description: I accidentally broke range fetch with idl
parent sorting as:
* In the basecase, we created idl which meant the root object
was not being added.
* I removed a loop that was needed to continue to populate
the elements from leftovers
* The "in idl" test was checking ==0 when it should be !=
Fix Description: Put the loop back, check the count rather than
the idl alloc, and fix the test condition.
https://pagure.io/389-ds-base/issue/49354
Author: wibrown
Review by: mreynolds
Signed-off-by: Mark Reynolds <mreynolds(a)redhat.com>
---
dirsrvtests/tests/tickets/ticket48755_test.py | 1 +
ldap/servers/slapd/back-ldbm/idl_new.c | 31 ++++++++++++++++-----------
2 files changed, 19 insertions(+), 13 deletions(-)
diff --git a/dirsrvtests/tests/tickets/ticket48755_test.py
b/dirsrvtests/tests/tickets/ticket48755_test.py
index b147d3e..c6e615a 100644
--- a/dirsrvtests/tests/tickets/ticket48755_test.py
+++ b/dirsrvtests/tests/tickets/ticket48755_test.py
@@ -6,6 +6,7 @@
# See LICENSE for details.
# --- END COPYRIGHT BLOCK ---
#
+import time
import pytest
from lib389.tasks import *
from lib389.utils import *
diff --git a/ldap/servers/slapd/back-ldbm/idl_new.c
b/ldap/servers/slapd/back-ldbm/idl_new.c
index 6307ecd..6c4abc2 100644
--- a/ldap/servers/slapd/back-ldbm/idl_new.c
+++ b/ldap/servers/slapd/back-ldbm/idl_new.c
@@ -361,7 +361,7 @@ idl_new_range_fetch(
ID suffix = 0; /* random- to suppress compiler warning */
idl_range_id_pair *leftover = NULL;
size_t leftoverlen = 32;
- int leftovercnt = 0;
+ size_t leftovercnt = 0;
if (NULL == flag_err) {
return NULL;
@@ -488,7 +488,7 @@ idl_new_range_fetch(
lastid = id;
/* we got another ID, add it to our IDL */
if (operator&SLAPI_OP_RANGE_NO_IDL_SORT) {
- if (!idl) {
+ if (count == 0) {
/* First time. Keep the suffix ID. */
suffix = key;
idl_rc = idl_append_extend(&idl, id);
@@ -499,13 +499,14 @@ idl_new_range_fetch(
/* Otherwise, keep the {key,id} in leftover array */
if (!leftover) {
leftover = (idl_range_id_pair *)slapi_ch_calloc(leftoverlen,
sizeof(idl_range_id_pair));
- } else if (leftovercnt == (int)leftoverlen) {
+ } else if (leftovercnt == leftoverlen) {
leftover = (idl_range_id_pair *)slapi_ch_realloc((char
*)leftover, 2 * leftoverlen * sizeof(idl_range_id_pair));
memset(leftover + leftovercnt, 0, leftoverlen);
leftoverlen *= 2;
}
leftover[leftovercnt].key = key;
- leftover[leftovercnt++].id = id;
+ leftover[leftovercnt].id = id;
+ leftovercnt++;
}
} else {
idl_rc = idl_append_extend(&idl, id);
@@ -613,16 +614,20 @@ error:
qsort((void *)&idl->b_ids[0], idl->b_nids, (size_t)sizeof(ID),
idl_sort_cmp);
}
if (operator&SLAPI_OP_RANGE_NO_IDL_SORT) {
- for (size_t i = 0; i < leftovercnt; i++) {
- if (leftover[i].key && idl_id_is_in_idlist(idl, leftover[i].key) ==
0) {
- idl_rc = idl_append_extend(&idl, leftover[i].id);
- if (idl_rc) {
- slapi_log_err(SLAPI_LOG_ERR, "idl_new_range_fetch",
- "Unable to extend id list (err=%d)\n",
idl_rc);
- idl_free(&idl);
- return NULL;
+ size_t remaining = leftovercnt;
+ while(remaining > 0) {
+ for (size_t i = 0; i < leftovercnt; i++) {
+ if (leftover[i].key > 0 && idl_id_is_in_idlist(idl,
leftover[i].key) != 0) {
+ idl_rc = idl_append_extend(&idl, leftover[i].id);
+ if (idl_rc) {
+ slapi_log_err(SLAPI_LOG_ERR, "idl_new_range_fetch",
+ "Unable to extend id list (err=%d)\n",
idl_rc);
+ idl_free(&idl);
+ return NULL;
+ }
+ leftover[i].key = 0;
+ remaining--;
}
- leftover[i].key = 0;
}
}
slapi_ch_free((void **)&leftover);
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.