Mark processing SDO request as invalid if config is cleared.

This commit is contained in:
Florian Pose 2012-12-04 12:09:42 +01:00
parent e59b790583
commit cf327f63c8
2 changed files with 14 additions and 2 deletions

View File

@ -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,

View File

@ -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);