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>
__archive__
Paul Fertser 2015-07-30 11:55:43 +03:00 committed by Spencer Oliver
parent a769be6b9c
commit 2dcf7bf77d
1 changed files with 4 additions and 0 deletions

View File

@ -216,6 +216,7 @@ static int svf_read_command_from_file(FILE *fd);
static int svf_check_tdo(void); static int svf_check_tdo(void);
static int svf_add_check_para(uint8_t enabled, int buffer_offset, int bit_len); 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_run_command(struct command_context *cmd_ctx, char *cmd_str);
static int svf_execute_tap(void);
static FILE *svf_fd; static FILE *svf_fd;
static char *svf_read_line; static char *svf_read_line;
@ -277,6 +278,9 @@ static int svf_realloc_buffers(size_t len)
{ {
void *ptr; void *ptr;
if (svf_execute_tap() != ERROR_OK)
return ERROR_FAIL;
ptr = realloc(svf_tdi_buffer, len); ptr = realloc(svf_tdi_buffer, len);
if (!ptr) if (!ptr)
return ERROR_FAIL; return ERROR_FAIL;