ldap/servers/slapd/opshared.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
New commits:
commit c8e7fc567ca9b00969e3911bf3aa6245ebdffe5b
Author: Mark Reynolds <mreynolds(a)redhat.com>
Date: Tue Jul 19 18:28:06 2016 -0400
Ticket 48930 - Paged result search can hang the server
Bug Description: If a pages result has sent all its entry it's possible that
the connection lock/monitor is not exited. This can lead
to a deadlock when a new connection comes in.
Fix Description: Move the monitor exit to the proper location, and also set
the result to success if all the entries have been sent.
https://fedorahosted.org/389/ticket/48930
Reviewed by: nhosoi(Thanks!)
(cherry picked from commit bff1dd433f5de807ded1114e5961d66e2c0494e2)
diff --git a/ldap/servers/slapd/opshared.c b/ldap/servers/slapd/opshared.c
index 84e4c71..93334a1 100644
--- a/ldap/servers/slapd/opshared.c
+++ b/ldap/servers/slapd/opshared.c
@@ -694,11 +694,12 @@ op_shared_search (Slapi_PBlock *pb, int send_result)
/* search result could be reset in the backend/dse */
slapi_pblock_get(pb, SLAPI_SEARCH_RESULT_SET, &sr);
pagedresults_set_search_result(pb->pb_conn, operation, sr, 1/*locked*/,
pr_idx);
- PR_ExitMonitor(pb->pb_conn->c_mutex);
}
} else {
pr_stat = PAGEDRESULTS_SEARCH_END;
+ rc = LDAP_SUCCESS;
}
+ PR_ExitMonitor(pb->pb_conn->c_mutex);
pagedresults_unlock(pb->pb_conn, pr_idx);
if ((PAGEDRESULTS_SEARCH_END == pr_stat) || (0 == pnentries)) {