diff --git a/master/master.c b/master/master.c index 0bf44ddb..282f5452 100644 --- a/master/master.c +++ b/master/master.c @@ -1634,13 +1634,15 @@ void ec_master_exec_slave_fsms( fsm->slave->ring_position); #endif if (ec_fsm_slave_exec(fsm, datagram)) { - // FSM consumed datagram + if (datagram->state != EC_DATAGRAM_INVALID) { + // FSM consumed datagram #if DEBUG_INJECT - EC_MASTER_DBG(master, 1, "FSM consumed datagram %s\n", - datagram->name); + EC_MASTER_DBG(master, 1, "FSM consumed datagram %s\n", + datagram->name); #endif - master->ext_ring_idx_fsm = - (master->ext_ring_idx_fsm + 1) % EC_EXT_RING_SIZE; + master->ext_ring_idx_fsm = + (master->ext_ring_idx_fsm + 1) % EC_EXT_RING_SIZE; + } } else { // FSM finished @@ -1660,8 +1662,10 @@ void ec_master_exec_slave_fsms( datagram = ec_master_get_external_datagram(master); if (ec_fsm_slave_exec(&master->fsm_slave->fsm, datagram)) { - master->ext_ring_idx_fsm = - (master->ext_ring_idx_fsm + 1) % EC_EXT_RING_SIZE; + if (datagram->state != EC_DATAGRAM_INVALID) { + master->ext_ring_idx_fsm = + (master->ext_ring_idx_fsm + 1) % EC_EXT_RING_SIZE; + } list_add_tail(&master->fsm_slave->fsm.list, &master->fsm_exec_list); master->fsm_exec_count++;