From 4470394a8db5f680e715fe5f0d5f12885c1e4342 Mon Sep 17 00:00:00 2001 From: Noriko Hosoi Date: Fri, 1 Nov 2013 18:22:47 -0700 Subject: [PATCH 146/225] Ticket #47581 - Winsync plugin segfault during incremental backoff (phase 2) Fix description: Apply the previous patch Ticket #47581 against the replication plug-in (repl5_inc_protocol.c): Make sure to delete the backoff timer when 1) a replication agreement is removed and the protocol is deleted, and 2) a new backoff timer set and there is already a backoff timer set up. https://fedorahosted.org/389/ticket/47581 Reviewed by rmeggins (Thank you, Rich!!) (cherry picked from commit 8eecc43e0160e132949ed504162b4536d6040620) (cherry picked from commit 962fc45a15a4bc2e0d13d3d8b12225105ef43dbb) (cherry picked from commit 0df4c665401db297f303ad91f5e892b1e604e63a) (cherry picked from commit 8bfe5f5d8ec81d6d163baa28ece90ed9b88b4343) --- ldap/servers/plugins/replication/repl5_inc_protocol.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/ldap/servers/plugins/replication/repl5_inc_protocol.c b/ldap/servers/plugins/replication/repl5_inc_protocol.c index 82b121c..6a2179a 100644 --- a/ldap/servers/plugins/replication/repl5_inc_protocol.c +++ b/ldap/servers/plugins/replication/repl5_inc_protocol.c @@ -509,6 +509,11 @@ repl5_inc_waitfor_async_results(result_data *rd) static void repl5_inc_delete(Private_Repl_Protocol **prpp) { + repl5_inc_private *prp_priv = (repl5_inc_private *)(*prpp)->private; + /* if backoff is set, delete it (from EQ, as well) */ + if (prp_priv->backoff) { + backoff_delete(&prp_priv->backoff); + } /* First, stop the protocol if it isn't already stopped */ if (!(*prpp)->stopped) { (*prpp)->stopped = 1; @@ -839,6 +844,10 @@ repl5_inc_run(Private_Repl_Protocol *prp) state2name(current_state)); } else { /* Set up the backoff timer to wake us up at the appropriate time */ + /* if previous backoff set up, delete it. */ + if (prp_priv->backoff) { + backoff_delete(&prp_priv->backoff); + } if (use_busy_backoff_timer){ /* we received a busy signal from the consumer, wait for a while */ if (!busywaittime){ -- 1.8.1.4