# HG changeset patch # User Florian Pose # Date 1354620223 -3600 # Node ID 8c7e674aa5d61f509e985f0bd17ab8768e3ff4f1 # Parent 8e0bab31fdddf9524c78cf792074cb61e11a6e67 Invalidate processing register requests when clearing configuration. diff -r 8e0bab31fddd -r 8c7e674aa5d6 master/fsm_slave.c --- a/master/fsm_slave.c Tue Dec 04 12:22:38 2012 +0100 +++ b/master/fsm_slave.c Tue Dec 04 12:23:43 2012 +0100 @@ -336,6 +336,12 @@ 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 -r 8e0bab31fddd -r 8c7e674aa5d6 master/slave_config.c --- a/master/slave_config.c Tue Dec 04 12:22:38 2012 +0100 +++ b/master/slave_config.c Tue Dec 04 12:23:43 2012 +0100 @@ -268,7 +268,18 @@ ) { 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; } }