Browse Source

target: Fix memory leak

Change-Id: Ib23dfd653d8edacb890a46179e9d437c027d58e8
Signed-off-by: Marc Schink <openocd-dev@marcschink.de>
rtt
Marc Schink 7 years ago
parent
commit
4494c645b0
2 changed files with 20 additions and 5 deletions
  1. +19
    -4
      src/target/target.c
  2. +1
    -1
      src/target/target.h

+ 19
- 4
src/target/target.c View File

@@ -1871,6 +1871,17 @@ int target_free_working_area(struct target *target, struct working_area *area)
return target_free_working_area_restore(target, area, 1);
}

static void target_destroy(struct target *target)
{
if (target->type->deinit_target)
target->type->deinit_target(target);

free(target->type);
free(target->trace_info);
free(target->cmd_name);
free(target);
}

void target_quit(void)
{
struct target_event_callback *pe = target_event_callbacks;
@@ -1889,11 +1900,15 @@ void target_quit(void)
}
target_timer_callbacks = NULL;

for (struct target *target = all_targets;
target; target = target->next) {
if (target->type->deinit_target)
target->type->deinit_target(target);
for (struct target *target = all_targets; target;) {
struct target *tmp;

tmp = target->next;
target_destroy(target);
target = tmp;
}

all_targets = NULL;
}

/* free resources and restore memory, if restoring memory fails,


+ 1
- 1
src/target/target.h View File

@@ -125,7 +125,7 @@ enum target_register_class {
/* target_type.h contains the full definition of struct target_type */
struct target {
struct target_type *type; /* target type definition (name, access functions) */
const char *cmd_name; /* tcl Name of target */
char *cmd_name; /* tcl Name of target */
int target_number; /* DO NOT USE! field to be removed in 2010 */
struct jtag_tap *tap; /* where on the jtag chain is this */
int32_t coreid; /* which device on the TAP? */


Loading…
Cancel
Save