Fixed reset of allow_scanning flag if ecrt_master_activate() was not called.
authorFlorian Pose <fp@igh-essen.com>
Fri, 13 Jan 2012 11:27:20 +0100
changeset 2270 51d2b26a5d1c
parent 2264 c5aca818cbeb
child 2271 1798bcdaa8d0
Fixed reset of allow_scanning flag if ecrt_master_activate() was not called.
master/master.c
--- a/master/master.c	Tue Jan 10 12:06:22 2012 +0100
+++ b/master/master.c	Fri Jan 13 11:27:20 2012 +0100
@@ -594,7 +594,7 @@
         if (ret) {
             EC_MASTER_INFO(master, "Finishing slave configuration"
                     " interrupted by signal.\n");
-            goto out_allow;
+            goto out_return;
         }
 
         EC_MASTER_DBG(master, 1, "Waiting for pending slave"
@@ -645,6 +645,7 @@
     
 out_allow:
     master->allow_scan = 1;
+out_return:
     return ret;
 }
 
@@ -662,6 +663,9 @@
         ec_master_clear_config(master);
     }
 
+    /* Re-allow scanning for IDLE phase. */
+    master->allow_scan = 1;
+
     EC_MASTER_DBG(master, 1, "OPERATION -> IDLE.\n");
 
     master->phase = EC_IDLE;
@@ -2038,7 +2042,9 @@
         return ret;
     }
 
-    master->allow_scan = 1; // allow re-scanning on topology change
+    /* Allow scanning after a topology change. */
+    master->allow_scan = 1;
+
     master->active = 1;
 
     // notify state machine, that the configuration shall now be applied
@@ -2109,7 +2115,10 @@
                 "EtherCAT-IDLE"))
         EC_MASTER_WARN(master, "Failed to restart master thread!\n");
 
-    master->allow_scan = 1;
+    /* Disallow scanning to get into the same state like after a master
+     * request (after ec_master_enter_operation_phase() is called). */
+    master->allow_scan = 0;
+
     master->active = 0;
 }