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
