Browse Source

helper: fix flaky capture command

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 <oyvind.harboe@zylin.com>
tags/v0.5.0-rc1
Øyvind Harboe 13 years ago
parent
commit
1abc26d7a2
1 changed files with 16 additions and 0 deletions
  1. +16
    -0
      src/helper/command.c

+ 16
- 0
src/helper/command.c View File

@@ -36,6 +36,7 @@
#endif

// @todo the inclusion of target.h here is a layering violation
#include <jtag/jtag.h>
#include <target/target.h>
#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;


Loading…
Cancel
Save