ldap/servers/slapd/opshared.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
New commits: commit bff1dd433f5de807ded1114e5961d66e2c0494e2 Author: Mark Reynolds mreynolds@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!)
diff --git a/ldap/servers/slapd/opshared.c b/ldap/servers/slapd/opshared.c index 7eaa19a..15207a5 100644 --- a/ldap/servers/slapd/opshared.c +++ b/ldap/servers/slapd/opshared.c @@ -695,11 +695,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)) {
389-commits@lists.fedoraproject.org