diff -r f79d4bb5b23a -r 3c4923051e43 master/fsm_master.c --- a/master/fsm_master.c Fri Apr 17 12:03:12 2009 +0000 +++ b/master/fsm_master.c Fri Apr 17 12:41:57 2009 +0000 @@ -73,6 +73,7 @@ fsm->datagram = datagram; fsm->state = ec_fsm_master_state_start; fsm->idle = 0; + fsm->link_state = 0; fsm->slaves_responding = 0; fsm->topology_change_pending = 0; fsm->slave_states = EC_SLAVE_STATE_UNKNOWN; @@ -194,6 +195,16 @@ EC_INFO("%u slave(s) responding.\n", fsm->slaves_responding); } + if (fsm->link_state && !master->main_device.link_state) { // link went down + // clear slave list +#ifdef EC_EOE + ec_master_eoe_stop(master); + ec_master_clear_eoe_handlers(master); +#endif + ec_master_clear_slaves(master); + } + fsm->link_state = master->main_device.link_state; + if (datagram->state != EC_DATAGRAM_RECEIVED) { // link is down ec_fsm_master_restart(fsm); return;