From f47db66e090e8773d79c83cef04dccf308e385ce Mon Sep 17 00:00:00 2001
From: Florian Pose <fp@igh-essen.com>
Date: Tue, 21 Nov 2006 15:13:48 +0000
Subject: [PATCH] Introduced "starved" datagrams.

---
 master/master.c | 8 +++++++-
 master/master.h | 1 +
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/master/master.c b/master/master.c
index d2b95449..d23b03ef 100644
--- a/master/master.c
+++ b/master/master.c
@@ -129,6 +129,7 @@ int ec_master_init(ec_master_t *master, /**< EtherCAT master */
     master->debug_level = 0;
 
     master->stats.timeouts = 0;
+    master->stats.starved = 0;
     master->stats.corrupted = 0;
     master->stats.skipped = 0;
     master->stats.unmatched = 0;
@@ -710,6 +711,11 @@ void ec_master_output_stats(ec_master_t *master /**< EtherCAT master */)
                     master->stats.timeouts == 1 ? "" : "s");
             master->stats.timeouts = 0;
         }
+        if (master->stats.starved) {
+            EC_WARN("%i datagram%s STARVED!\n", master->stats.starved,
+                    master->stats.starved == 1 ? "" : "s");
+            master->stats.starved = 0;
+        }
         if (master->stats.corrupted) {
             EC_WARN("%i frame%s CORRUPTED!\n", master->stats.corrupted,
                     master->stats.corrupted == 1 ? "" : "s");
@@ -1438,7 +1444,7 @@ void ecrt_master_receive(ec_master_t *master /**< EtherCAT master */)
                     - datagram->cycles_queued > cycles_timeout) {
                     list_del_init(&datagram->queue);
                     datagram->state = EC_DATAGRAM_TIMED_OUT;
-                    master->stats.timeouts++;
+                    master->stats.starved++;
                     ec_master_output_stats(master);
                 }
                 break;
diff --git a/master/master.h b/master/master.h
index a27154d5..e44318f5 100644
--- a/master/master.h
+++ b/master/master.h
@@ -75,6 +75,7 @@ ec_master_mode_t;
 typedef struct
 {
     unsigned int timeouts; /**< datagram timeouts */
+    unsigned int starved; /**< starved datagrams (not even sent) */
     unsigned int corrupted; /**< corrupted frames */
     unsigned int skipped; /**< skipped datagrams (the ones that were
                              requeued when not yet received) */
-- 
GitLab