From cf327f63c886f72c8d5907209cea4c36063c50e9 Mon Sep 17 00:00:00 2001 From: Florian Pose Date: Tue, 4 Dec 2012 12:09:42 +0100 Subject: [PATCH] Mark processing SDO request as invalid if config is cleared. --- master/fsm_master.c | 15 +++++++++++++-- master/master.c | 1 + 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/master/fsm_master.c b/master/fsm_master.c index ad4c9af6..ca29c711 100644 --- a/master/fsm_master.c +++ b/master/fsm_master.c @@ -435,8 +435,11 @@ int ec_fsm_master_action_process_sdo( for (slave = master->slaves; slave < master->slaves + master->slave_count; slave++) { - if (!slave->config) + + if (!slave->config) { continue; + } + list_for_each_entry(req, &slave->config->sdo_requests, list) { if (req->state == EC_INT_REQUEST_QUEUED) { @@ -1215,7 +1218,15 @@ void ec_fsm_master_state_sdo_request( { ec_sdo_request_t *request = fsm->sdo_request; - if (ec_fsm_coe_exec(&fsm->fsm_coe)) return; + if (!request) { + // configuration was cleared in the meantime + ec_fsm_master_restart(fsm); + return; + } + + if (ec_fsm_coe_exec(&fsm->fsm_coe)) { + return; + } if (!ec_fsm_coe_success(&fsm->fsm_coe)) { EC_SLAVE_DBG(fsm->slave, 1, diff --git a/master/master.c b/master/master.c index a9296d9a..8074c88d 100644 --- a/master/master.c +++ b/master/master.c @@ -415,6 +415,7 @@ void ec_master_clear_slave_configs(ec_master_t *master) ec_slave_config_t *sc, *next; master->dc_ref_config = NULL; + master->fsm.sdo_request = NULL; // mark sdo_request as invalid list_for_each_entry_safe(sc, next, &master->configs, list) { list_del(&sc->list);