--- a/master/master.c Fri Oct 20 13:03:01 2006 +0000
+++ b/master/master.c Fri Oct 20 13:05:48 2006 +0000
@@ -130,6 +130,8 @@
master->idle_cycle_time_pos = 0;
master->eoe_cycle_time_pos = 0;
master->debug_level = 0;
+ INIT_LIST_HEAD(&master->sdo_requests);
+ init_waitqueue_head(&master->sdo_wait_queue);
// create workqueue
if (!(master->workqueue = create_singlethread_workqueue("EtherCAT"))) {
@@ -237,6 +239,7 @@
ec_master_eoe_stop(master);
ec_master_idle_stop(master);
+ ec_master_flush_sdo_requests(master);
ec_master_clear_slaves(master);
// empty datagram queue
@@ -293,6 +296,24 @@
/*****************************************************************************/
/**
+ Flushes the SDO request queue.
+*/
+
+void ec_master_flush_sdo_requests(ec_master_t *master)
+{
+ ec_sdo_request_t *req, *next_req;
+
+ list_for_each_entry_safe(req, next_req, &master->sdo_requests, queue) {
+ list_del_init(&req->queue);
+ req->return_code = -1;
+ }
+
+ wake_up_interruptible(&master->sdo_wait_queue);
+}
+
+/*****************************************************************************/
+
+/**
Places a datagram in the datagram queue.
*/