diff --git a/master/fsm_slave.c b/master/fsm_slave.c index 416fee7c..d8fd76ba 100644 --- a/master/fsm_slave.c +++ b/master/fsm_slave.c @@ -336,6 +336,12 @@ void ec_fsm_slave_state_reg_request( ec_slave_t *slave = fsm->slave; ec_reg_request_t *reg = fsm->reg_request; + if (!reg) { + // configuration was cleared in the meantime + fsm->state = ec_fsm_slave_state_ready; + return; + } + if (fsm->datagram->state != EC_DATAGRAM_RECEIVED) { EC_SLAVE_ERR(slave, "Failed to receive register" " request datagram: "); diff --git a/master/slave_config.c b/master/slave_config.c index bbe22826..8b063c0d 100644 --- a/master/slave_config.c +++ b/master/slave_config.c @@ -268,7 +268,18 @@ void ec_slave_config_detach( ) { if (sc->slave) { + ec_reg_request_t *reg; + sc->slave->config = NULL; + + // invalidate processing register request + list_for_each_entry(reg, &sc->reg_requests, list) { + if (sc->slave->fsm.reg_request == reg) { + sc->slave->fsm.reg_request = NULL; + break; + } + } + sc->slave = NULL; } }