From 9aa952b2dd7c091c63dbfc7becb3b3dcc9f7bfce Mon Sep 17 00:00:00 2001 From: Ethan Jackson Date: Fri, 1 Apr 2011 13:22:44 -0700 Subject: [PATCH] cfm: cfm_configure() only update when necessary. Calling cfm_configure often could cause timers to be reset resulting in unexpected behavior. This commit only updates when cfm configuration actually changed. Bug #5244. --- lib/cfm.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/lib/cfm.c b/lib/cfm.c index f6cfb2e6..f9b34886 100644 --- a/lib/cfm.c +++ b/lib/cfm.c @@ -230,19 +230,24 @@ cfm_wait(struct cfm *cfm) bool cfm_configure(struct cfm *cfm) { - struct cfm_internal *cfmi; + struct cfm_internal *cfmi = cfm_to_internal(cfm); + uint8_t interval; if (!cfm_is_valid_mpid(cfm->mpid) || !cfm->interval) { return false; } - cfmi = cfm_to_internal(cfm); - cfmi->ccm_interval = ms_to_ccm_interval(cfm->interval); - cfmi->ccm_interval_ms = ccm_interval_to_ms(cfmi->ccm_interval); + interval = ms_to_ccm_interval(cfm->interval); + + if (interval != cfmi->ccm_interval) { + cfmi->ccm_interval = interval; + cfmi->ccm_interval_ms = ccm_interval_to_ms(interval); + + /* Force a resend and check in case anything changed. */ + timer_set_expired(&cfmi->tx_timer); + timer_set_expired(&cfmi->fault_timer); + } - /* Force a resend and check in case anything changed. */ - timer_set_expired(&cfmi->tx_timer); - timer_set_expired(&cfmi->fault_timer); return true; } -- 2.30.2