From e4722b4475a3c7cdf3e57ae11bd444c901642cf6 Mon Sep 17 00:00:00 2001 From: Matthias Luescher Date: Thu, 6 Jan 2011 17:19:15 +0100 Subject: [PATCH] properly deactivate slaves if there is no eoe slave --- master/master.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/master/master.c b/master/master.c index 577638c6..05525f94 100644 --- a/master/master.c +++ b/master/master.c @@ -1958,6 +1958,7 @@ void ecrt_master_deactivate(ec_master_t *master) ec_slave_t *slave; #ifdef EC_EOE ec_eoe_t *eoe; + int is_eoe_slave; #endif EC_MASTER_DBG(master, 1, "%s(master = 0x%p)\n", __func__, master); @@ -1981,15 +1982,18 @@ void ecrt_master_deactivate(ec_master_t *master) // set state to PREOP for all but eoe slaves #ifdef EC_EOE + is_eoe_slave = 0; // ... but leave EoE slaves in OP list_for_each_entry(eoe, &master->eoe_handlers, list) { - if (slave != eoe->slave || !ec_eoe_is_open(eoe)) { - ec_slave_request_state(slave, EC_SLAVE_STATE_PREOP); - // mark for reconfiguration, because the master could have no - // possibility for a reconfiguration between two sequential operation - // phases. - slave->force_config = 1; - } + if (slave == eoe->slave && ec_eoe_is_open(eoe)) + is_eoe_slave = 1; + } + if (!is_eoe_slave) { + ec_slave_request_state(slave, EC_SLAVE_STATE_PREOP); + // mark for reconfiguration, because the master could have no + // possibility for a reconfiguration between two sequential operation + // phases. + slave->force_config = 1; } #else ec_slave_request_state(slave, EC_SLAVE_STATE_PREOP);