master/master.c
changeset 2040 45706e3273fd
parent 2039 629d3cf05180
child 2042 8b358effa78b
child 2045 ff2a13a4603c
--- a/master/master.c	Fri Jan 14 12:23:00 2011 +0100
+++ b/master/master.c	Mon Jan 17 11:09:11 2011 +0100
@@ -416,18 +416,14 @@
         wake_up(&master->reg_queue);
     }
 
-    // we must lock the fsm_queue here because the slave's fsm_datagram will be unqueued
-    if (master->fsm_queue_lock_cb)
-        master->fsm_queue_lock_cb(master->fsm_queue_locking_data);
-    ec_mutex_lock(&master->fsm_queue_mutex);
+    // we must lock the io_mutex here because the slave's fsm_datagram will be unqueued
+    ec_mutex_lock(&master->io_mutex);
     for (slave = master->slaves;
             slave < master->slaves + master->slave_count;
             slave++) {
         ec_slave_clear(slave);
     }
-    ec_mutex_unlock(&master->fsm_queue_mutex);
-    if (master->fsm_queue_unlock_cb)
-        master->fsm_queue_unlock_cb(master->fsm_queue_locking_data);
+    ec_mutex_unlock(&master->io_mutex);
 
     if (master->slaves) {
         kfree(master->slaves);
@@ -445,11 +441,14 @@
 {
     ec_domain_t *domain, *next;
 
+    // we must lock the io_mutex here because the domains's datagram will be unqueued
+    ec_mutex_lock(&master->io_mutex);
     list_for_each_entry_safe(domain, next, &master->domains, list) {
         list_del(&domain->list);
         ec_domain_clear(domain);
         kfree(domain);
     }
+    ec_mutex_unlock(&master->io_mutex);
 }
 
 /*****************************************************************************/