aboutsummaryrefslogtreecommitdiff
path: root/src/svf
diff options
context:
space:
mode:
authorPaul Fertser <fercerpav@gmail.com>2015-07-30 11:55:43 +0300
committerSpencer Oliver <spen@spen-soft.co.uk>2015-08-06 13:17:15 +0100
commit2dcf7bf77d09f139308281c223d8562b6420b448 (patch)
treeecbedad0caa89ed4b6fec276579cd414d8bb44f9 /src/svf
parenta769be6b9c9dea7e498535eba0a0255f1e785575 (diff)
downloadriscv-openocd-2dcf7bf77d09f139308281c223d8562b6420b448.zip
riscv-openocd-2dcf7bf77d09f139308281c223d8562b6420b448.tar.gz
riscv-openocd-2dcf7bf77d09f139308281c223d8562b6420b448.tar.bz2
svf: flush the queue before reallocing memory
During reallocation a new memory region might be allocated and the old one freed. If jtag queue is holding a pointer to the old memory, it will segfault during the execution. Avoid this by flushing the queue before a reallocation attempt is made. This should fix ticket #102. Change-Id: I737fc3f1ebf6d76413a475beb8bf20184fe0233f Reported-by: Alex Forencich <aforencich@users.sf.net> Signed-off-by: Paul Fertser <fercerpav@gmail.com> Reviewed-on: http://openocd.zylin.com/2899 Tested-by: jenkins Reviewed-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
Diffstat (limited to 'src/svf')
-rw-r--r--src/svf/svf.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/svf/svf.c b/src/svf/svf.c
index cf0cfae..15198d9 100644
--- a/src/svf/svf.c
+++ b/src/svf/svf.c
@@ -216,6 +216,7 @@ static int svf_read_command_from_file(FILE *fd);
static int svf_check_tdo(void);
static int svf_add_check_para(uint8_t enabled, int buffer_offset, int bit_len);
static int svf_run_command(struct command_context *cmd_ctx, char *cmd_str);
+static int svf_execute_tap(void);
static FILE *svf_fd;
static char *svf_read_line;
@@ -277,6 +278,9 @@ static int svf_realloc_buffers(size_t len)
{
void *ptr;
+ if (svf_execute_tap() != ERROR_OK)
+ return ERROR_FAIL;
+
ptr = realloc(svf_tdi_buffer, len);
if (!ptr)
return ERROR_FAIL;