aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Welwarsky <matthias.welwarsky@sysgo.com>2018-04-06 12:38:12 +0200
committerTim Newsome <tim@sifive.com>2018-05-08 15:21:48 -0700
commit4c8e7a0486c492786f79fcb92e9cde9758ebfee7 (patch)
tree74d0d1da9d3ddecbe7d4344ea0e24c2bc76a9534
parent5f723aa9cdfa24a57e8f08b66461964e4655470b (diff)
downloadriscv-openocd-4c8e7a0486c492786f79fcb92e9cde9758ebfee7.zip
riscv-openocd-4c8e7a0486c492786f79fcb92e9cde9758ebfee7.tar.gz
riscv-openocd-4c8e7a0486c492786f79fcb92e9cde9758ebfee7.tar.bz2
target: free target SMP list on shutdown
On SMP targets, the "target smp" command creates a list of targets that belong to the SMP cluster. Free this list when a target gets destroyed on shutdown. For simplicity, the complete list is free'd as soon as the first target of the SMP cluster is destroyed instead of individually removing targets from the list. Change-Id: Ie217ae1efb2e819c288ff3b1155aeaf0a19b06be Signed-off-by: Matthias Welwarsky <matthias.welwarsky@sysgo.com> Reviewed-on: http://openocd.zylin.com/4481 Tested-by: jenkins Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
-rw-r--r--src/target/target.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/target/target.c b/src/target/target.c
index 482dc74..9bf19c6 100644
--- a/src/target/target.c
+++ b/src/target/target.c
@@ -1912,6 +1912,18 @@ static void target_destroy(struct target *target)
free(target->working_areas);
}
+ /* release the targets SMP list */
+ if (target->smp) {
+ struct target_list *head = target->head;
+ while (head != NULL) {
+ struct target_list *pos = head->next;
+ head->target->smp = 0;
+ free(head);
+ head = pos;
+ }
+ target->smp = 0;
+ }
+
free(target->type);
free(target->trace_info);
free(target->fileio_info);