diff --git a/ldap/servers/slapd/opshared.c b/ldap/servers/slapd/opshared.c index 20de8b4..9a5a141 100644 --- a/ldap/servers/slapd/opshared.c +++ b/ldap/servers/slapd/opshared.c @@ -904,12 +904,8 @@ op_shared_search (Slapi_PBlock *pb, int send_result) } pagedresults_unlock(pb->pb_conn, pr_idx); } - pagedresults_set_response_control(pb, 0, estimate, curr_search_count, pr_idx); slapi_pblock_set( pb, SLAPI_SEARCH_RESULT_SET, NULL ); next_be = NULL; /* to break the loop */ - if (curr_search_count == -1) { - pagedresults_free_one(pb->pb_conn, operation, pr_idx); - } if (operation->o_status & SLAPI_OP_STATUS_ABANDONED) { /* It turned out this search was abandoned. */ PR_Lock(pb->pb_conn->c_mutex); @@ -921,6 +917,10 @@ op_shared_search (Slapi_PBlock *pb, int send_result) rc = LDAP_SUCCESS; goto free_and_return; } + pagedresults_set_response_control(pb, 0, estimate, curr_search_count, pr_idx); + if (curr_search_count == -1) { + pagedresults_free_one(pb->pb_conn, operation, pr_idx); + } } /* if rc != 0 an error occurred while sending back the entries diff --git a/ldap/servers/slapd/pagedresults.c b/ldap/servers/slapd/pagedresults.c index 6ee1748..42b88b1 100644 --- a/ldap/servers/slapd/pagedresults.c +++ b/ldap/servers/slapd/pagedresults.c @@ -210,6 +210,10 @@ bail: (prp->pr_flags & CONN_FLAG_PAGEDRESULTS_ABANDONED)) /* abandoned */) { _pr_cleanup_one_slot(prp); conn->c_pagedresults.prl_count--; + if (i == *index) { + *index = -1; + rc = LDAP_CANCELLED; + } } } PR_Unlock(conn->c_mutex);