Pārlūkot izejas kodu

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!)
Mark Reynolds 9 gadi atpakaļ
vecāks
revīzija
bff1dd433f
1 mainītis faili ar 2 papildinājumiem un 1 dzēšanām
  1. 2 1
      ldap/servers/slapd/opshared.c

+ 2 - 1
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)) {