Fixed reset of allow_scanning flag if ecrt_master_activate() was not called. redundancy
authorFlorian Pose <fp@igh-essen.com>
Fri, 13 Jan 2012 11:27:20 +0100
branchredundancy
changeset 2349 2f5993d86ea5
parent 2348 abb390ec7c4a
child 2350 2a6899b9bef3
Fixed reset of allow_scanning flag if ecrt_master_activate() was not called.
master/master.c
--- a/master/master.c	Tue Jan 10 13:04:06 2012 +0100
+++ b/master/master.c	Fri Jan 13 11:27:20 2012 +0100
@@ -620,7 +620,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"
@@ -672,6 +672,7 @@
     
 out_allow:
     master->allow_scan = 1;
+out_return:
     return ret;
 }
 
@@ -689,6 +690,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;
@@ -2133,7 +2137,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
@@ -2205,7 +2211,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;
 }