diff -r ef09f0ea0c4c -r 1875b9fea0ba master/master.c --- a/master/master.c Fri Feb 26 18:22:02 2010 +0100 +++ b/master/master.c Mon Mar 01 18:33:42 2010 +0100 @@ -417,7 +417,8 @@ request = list_entry(slave->slave_sdo_requests.next, ec_master_sdo_request_t, list); list_del_init(&request->list); // dequeue - EC_INFO("Discarding SDO request, slave %u does not exist anymore.\n", + EC_INFO("Discarding SDO request," + " slave %u does not exist anymore.\n", slave->ring_position); request->req.state = EC_INT_REQUEST_FAILURE; wake_up(&slave->sdo_queue); @@ -431,11 +432,27 @@ request = list_entry(slave->foe_requests.next, ec_master_foe_request_t, list); list_del_init(&request->list); // dequeue - EC_INFO("Discarding FOE request, slave %u does not exist anymore.\n", + EC_INFO("Discarding FoE request," + " slave %u does not exist anymore.\n", slave->ring_position); request->req.state = EC_INT_REQUEST_FAILURE; wake_up(&slave->foe_queue); } + // SoE requests + while (1) { + ec_master_soe_request_t *request; + if (list_empty(&slave->soe_requests)) + break; + // get first request + request = list_entry(slave->soe_requests.next, + ec_master_soe_request_t, list); + list_del_init(&request->list); // dequeue + EC_INFO("Discarding SoE request," + " slave %u does not exist anymore.\n", + slave->ring_position); + request->req.state = EC_INT_REQUEST_FAILURE; + wake_up(&slave->soe_queue); + } ec_slave_clear(slave); }