From 1abc26d7a2b7172184c64d2151bf4803699993da Mon Sep 17 00:00:00 2001 From: Øyvind Harboe Date: Mon, 20 Sep 2010 11:50:32 +0200 Subject: helper: fix flaky capture command MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit capture of progress output would get polling results. This will break in the example below where polling output would override the tcl return value. capture {sleep 10000; set abc def} Signed-off-by: Øyvind Harboe --- src/helper/command.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'src/helper') diff --git a/src/helper/command.c b/src/helper/command.c index 086b03d3..1bd8c429 100644 --- a/src/helper/command.c +++ b/src/helper/command.c @@ -36,6 +36,7 @@ #endif // @todo the inclusion of target.h here is a layering violation +#include #include #include "command.h" #include "configuration.h" @@ -867,6 +868,9 @@ static char* openocd_jim_fgets(char *s, int size, void *cookie) return NULL; } +/* Capture progress output and return as tcl return value. If the + * progress output was empty, return tcl return value. + */ static int jim_capture(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { if (argc != 2) @@ -874,9 +878,21 @@ static int jim_capture(Jim_Interp *interp, int argc, Jim_Obj *const *argv) struct log_capture_state *state = command_log_capture_start(interp); + /* disable polling during capture. This avoids capturing output + * from polling. + * + * This is necessary in order to avoid accidentially getting a non-empty + * string for tcl fn's. + */ + bool save_poll = jtag_poll_get_enabled(); + + jtag_poll_set_enabled(false); + const char *str = Jim_GetString(argv[1], NULL); int retcode = Jim_Eval_Named(interp, str, __THIS__FILE__, __LINE__); + jtag_poll_set_enabled(save_poll); + command_log_capture_finish(state); return retcode; -- cgit v1.2.3