浏览代码

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!)
Mark Reynolds 9 年之前
父节点
当前提交
ba636587e7
共有 1 个文件被更改,包括 3 次插入1 次删除
  1. 3 1
      ldap/servers/plugins/replication/repl5_inc_protocol.c

+ 3 - 1
ldap/servers/plugins/replication/repl5_inc_protocol.c

@@ -479,9 +479,11 @@ repl5_inc_flow_control_results(Repl_Agmt *agmt, result_data *rd)
     if ((rd->last_message_id_received <= rd->last_message_id_sent) &&
     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->last_message_id_sent - rd->last_message_id_received) >= agmt_get_flowcontrolwindow(agmt))) {
         rd->flowcontrol_detection++;
         rd->flowcontrol_detection++;
+        PR_Unlock(rd->lock);
         DS_Sleep(PR_MillisecondsToInterval(agmt_get_flowcontrolpause(agmt)));
         DS_Sleep(PR_MillisecondsToInterval(agmt_get_flowcontrolpause(agmt)));
+    } else {
+        PR_Unlock(rd->lock);
     }
     }
-    PR_Unlock(rd->lock);
 }
 }
 
 
 static int
 static int