master/master.c
changeset 430 74754f45d5fa
parent 418 7a43437bc48b
child 435 779a18d12e6c
--- 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.
 */