From f39ec26809ef7892ef7c9ce25e32bf6c336b3bac Mon Sep 17 00:00:00 2001
From: Florian Pose <fp@igh-essen.com>
Date: Mon, 30 Oct 2006 15:39:03 +0000
Subject: [PATCH] Remove estimated sync manager sizes when leaving operation
 mode.

---
 master/master.c | 5 +----
 master/slave.c  | 6 ++++++
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/master/master.c b/master/master.c
index eed47ff4..276c2e31 100644
--- a/master/master.c
+++ b/master/master.c
@@ -433,6 +433,7 @@ void ec_master_leave_operation_mode(ec_master_t *master
 
     // set states for all slaves
     list_for_each_entry(slave, &master->slaves, list) {
+        ec_slave_reset(slave);
         ec_slave_request_state(slave, EC_SLAVE_STATE_PREOP);
 
         fsm->slave = slave;
@@ -452,10 +453,6 @@ void ec_master_leave_operation_mode(ec_master_t *master
     master->release_cb = NULL;
     master->cb_data = NULL;
 
-    list_for_each_entry(slave, &master->slaves, list) {
-        ec_slave_reset(slave);
-    }
-
     master->mode = EC_MASTER_MODE_IDLE;
     queue_delayed_work(master->workqueue, &master->idle_work, 1);
 }
diff --git a/master/slave.c b/master/slave.c
index 95aa8b4f..6d9497e2 100644
--- a/master/slave.c
+++ b/master/slave.c
@@ -284,6 +284,7 @@ void ec_slave_clear(struct kobject *kobj /**< kobject of the slave */)
 void ec_slave_reset(ec_slave_t *slave /**< EtherCAT slave */)
 {
     ec_sdo_data_t *sdodata, *next_sdodata;
+    ec_sii_sync_t *sync;
 
     // remove FMMU configurations
     slave->fmmu_count = 0;
@@ -294,6 +295,11 @@ void ec_slave_reset(ec_slave_t *slave /**< EtherCAT slave */)
         kfree(sdodata->data);
         kfree(sdodata);
     }
+
+    // remove estimated sync manager sizes
+    list_for_each_entry(sync, &slave->sii_syncs, list) {
+        sync->est_length = 0;
+    }
 }
 
 /*****************************************************************************/
-- 
GitLab