ldap/servers/plugins/replication/repl5_inc_protocol.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
New commits:
commit 11dc5565ea60dbb5fe4787c0d96c2392394acf14
Author: Mark Reynolds <mreynolds(a)redhat.com>
Date: Mon Jul 11 10:30:04 2016 -0400
Ticket 48767 - flow control in replication also blocks receiving results
Bug Description: In ticket 47942 a flow control was introduced to reduce
the load of a replication consumer. It adds some pauses
in the asynch sending of updates. Unfortunately while it
pauses it holds the reader lock, so that the result reader
thread is also paused.
Fix Description: If we need to pause the sending of updates then also release
the Result Data lock so the reader thread is not blocked.
https://fedorahosted.org/389/ticket/48767
Reviewed by: nhosi(Thanks!)
(cherry picked from commit ba636587e77423c7773df60894344dea0377c36f)
diff --git a/ldap/servers/plugins/replication/repl5_inc_protocol.c
b/ldap/servers/plugins/replication/repl5_inc_protocol.c
index e02e883..fd0e3e5 100644
--- a/ldap/servers/plugins/replication/repl5_inc_protocol.c
+++ b/ldap/servers/plugins/replication/repl5_inc_protocol.c
@@ -472,9 +472,11 @@ repl5_inc_flow_control_results(Repl_Agmt *agmt, result_data *rd)
if ((rd->last_message_id_received <= rd->last_message_id_sent) &&
((rd->last_message_id_sent - rd->last_message_id_received) >=
agmt_get_flowcontrolwindow(agmt))) {
rd->flowcontrol_detection++;
+ PR_Unlock(rd->lock);
DS_Sleep(PR_MillisecondsToInterval(agmt_get_flowcontrolpause(agmt)));
+ } else {
+ PR_Unlock(rd->lock);
}
- PR_Unlock(rd->lock);
}
static int