master/master.c
changeset 2017 4b16e2dce5fb
parent 2016 4624979ec993
child 2018 6c05411fee9b
--- a/master/master.c	Mon Dec 13 17:38:24 2010 +0100
+++ b/master/master.c	Tue Dec 14 14:00:19 2010 +0100
@@ -1256,7 +1256,6 @@
 {
     ec_master_t *master = (ec_master_t *) priv_data;
     ec_slave_t *slave = NULL;
-    int fsm_exec;
     size_t sent_bytes;
 
     // send interval in IDLE phase
@@ -1275,24 +1274,21 @@
         up(&master->io_sem);
 
         if (master->injection_seq_rt == master->injection_seq_fsm) {
-            fsm_exec = 0;
             // execute master & slave state machines
             if (down_interruptible(&master->master_sem))
                 break;
-            fsm_exec = ec_fsm_master_exec(&master->fsm);
+            if (ec_fsm_master_exec(&master->fsm))
+                master->injection_seq_fsm++;
             for (slave = master->slaves;
                     slave < master->slaves + master->slave_count;
                     slave++) {
-                ec_fsm_slave_exec(&slave->fsm);
+                if (ec_fsm_slave_exec(&slave->fsm))
+                    master->injection_seq_fsm++;
             }
             up(&master->master_sem);
-
-            // queue and send
-            down(&master->io_sem);
-            if (fsm_exec) {
-                master->injection_seq_rt++;
-            }
-        }
+        }
+        // queue and send
+        down(&master->io_sem);
         ecrt_master_send(master);
         sent_bytes = master->main_device.tx_skb[
             master->main_device.tx_ring_index]->len;
@@ -1327,7 +1323,6 @@
 {
     ec_master_t *master = (ec_master_t *) priv_data;
     ec_slave_t *slave = NULL;
-    int fsm_exec;
 
     EC_MASTER_DBG(master, 1, "Operation thread running"
             " with fsm interval = %u us, max data size=%zu\n",
@@ -1340,21 +1335,18 @@
             // output statistics
             ec_master_output_stats(master);
 
-            fsm_exec = 0;
             // execute master & slave state machines
             if (down_interruptible(&master->master_sem))
                 break;
-            fsm_exec = ec_fsm_master_exec(&master->fsm);
+            if (ec_fsm_master_exec(&master->fsm))
+                master->injection_seq_fsm++;
             for (slave = master->slaves;
                     slave < master->slaves + master->slave_count;
                     slave++) {
-                ec_fsm_slave_exec(&slave->fsm);
+                if (ec_fsm_slave_exec(&slave->fsm))
+                    master->injection_seq_fsm++;
             }
             up(&master->master_sem);
-
-            // inject datagrams (let the rt thread queue them, see ecrt_master_send)
-            if (fsm_exec)
-                master->injection_seq_fsm++;
         }
 
 #ifdef EC_USE_HRTIMER