This is an automated email from Gerrit.

Antonio Borneo ([email protected]) just uploaded a new patch set to 
Gerrit, which you can find at http://openocd.zylin.com/5705

-- gerrit

commit 70338e095001d908a1b68119390b90dd1e630b11
Author: Antonio Borneo <[email protected]>
Date:   Fri May 29 12:00:35 2020 +0200

    log: fix kept_alive() and report expired timeout
    
    The kept_alive() function is called to inform the keep-alive code
    that a keep-alive as been just kicked through some other path.
    But kept_alive() erroneously resets the timeout counter without
    checking if it has already expired, thus masking a potential
    timeout.
    
    Check if timeout counter has expired during kept_alive().
    While there, put the timeout values in macros and explicit the
    units in the timeout messages.
    
    Change-Id: Iaf6368b44e5b5352b1cc4e7efbb2368575dcfa08
    Signed-off-by: Antonio Borneo <[email protected]>

diff --git a/src/helper/log.c b/src/helper/log.c
index 380f548..e98dcfb 100644
--- a/src/helper/log.c
+++ b/src/helper/log.c
@@ -401,25 +401,38 @@ char *alloc_printf(const char *format, ...)
  * fast when invoked more often than every 500ms.
  *
  */
-void keep_alive(void)
+#define KEEP_ALIVE_KICK_TIME_MS  500
+#define KEEP_ALIVE_TIMEOUT_MS   1000
+
+static void gdb_timeout_warning(void)
 {
-       current_time = timeval_ms();
-       if (current_time-last_time > 1000) {
-               extern int gdb_actual_connections;
+       extern int gdb_actual_connections;
 
-               if (gdb_actual_connections)
-                       LOG_WARNING("keep_alive() was not invoked in the "
-                               "1000ms timelimit. GDB alive packet not "
-                               "sent! (%" PRId64 "). Workaround: increase "
+       if (gdb_actual_connections)
+               LOG_WARNING("keep_alive() was not invoked in the "
+                               "%d ms timelimit. GDB alive packet not "
+                               "sent! (%" PRId64 " ms). Workaround: increase "
                                "\"set remotetimeout\" in GDB",
-                               current_time-last_time);
-               else
-                       LOG_DEBUG("keep_alive() was not invoked in the "
-                               "1000ms timelimit (%" PRId64 "). This may cause 
"
+                               KEEP_ALIVE_TIMEOUT_MS,
+                               current_time - last_time);
+       else
+               LOG_DEBUG("keep_alive() was not invoked in the "
+                               "%d ms timelimit (%" PRId64 " ms). This may 
cause "
                                "trouble with GDB connections.",
-                               current_time-last_time);
-       }
-       if (current_time-last_time > 500) {
+                               KEEP_ALIVE_TIMEOUT_MS,
+                               current_time - last_time);
+}
+
+void keep_alive(void)
+{
+       current_time = timeval_ms();
+
+       if (current_time - last_time > KEEP_ALIVE_TIMEOUT_MS)
+               gdb_timeout_warning();
+
+       if (current_time - last_time > KEEP_ALIVE_KICK_TIME_MS) {
+               last_time = current_time;
+
                /* this will keep the GDB connection alive */
                LOG_USER_N("%s", "");
 
@@ -430,8 +443,6 @@ void keep_alive(void)
                 *
                 * These functions should be invoked at a well defined spot in 
server.c
                 */
-
-               last_time = current_time;
        }
 }
 
@@ -439,6 +450,10 @@ void keep_alive(void)
 void kept_alive(void)
 {
        current_time = timeval_ms();
+
+       if (current_time - last_time > KEEP_ALIVE_TIMEOUT_MS)
+               gdb_timeout_warning();
+
        last_time = current_time;
 }
 

-- 


_______________________________________________
OpenOCD-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to