target: Fix memory leak
Change-Id: Ib23dfd653d8edacb890a46179e9d437c027d58e8 Signed-off-by: Marc Schink <openocd-dev@marcschink.de> Reviewed-on: http://openocd.zylin.com/4048 Tested-by: jenkins Reviewed-by: Tomas Vanek <vanekt@fbl.cz> Reviewed-by: Chengyu Zheng <chengyu.zheng@polimi.it> Reviewed-by: Andreas Färber <afaerber@suse.de>
This commit is contained in:
committed by
Freddie Chopin
parent
568e84236b
commit
518fcd3883
@@ -1870,6 +1870,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;
|
||||
@@ -1888,11 +1899,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,
|
||||
|
||||
Reference in New Issue
Block a user