aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/jtag/core.c8
-rw-r--r--src/openocd.c4
-rw-r--r--src/target/target.c2
3 files changed, 12 insertions, 2 deletions
diff --git a/src/jtag/core.c b/src/jtag/core.c
index 0fbd327f..4522321a 100644
--- a/src/jtag/core.c
+++ b/src/jtag/core.c
@@ -1308,6 +1308,14 @@ void jtag_tap_free(struct jtag_tap *tap)
{
jtag_unregister_event_callback(&jtag_reset_callback, tap);
+ struct jtag_tap_event_action *jteap = tap->event_action;
+ while (jteap) {
+ struct jtag_tap_event_action *next = jteap->next;
+ Jim_DecrRefCount(jteap->interp, jteap->body);
+ free(jteap);
+ jteap = next;
+ }
+
free(tap->expected);
free(tap->expected_mask);
free(tap->expected_ids);
diff --git a/src/openocd.c b/src/openocd.c
index d5d7ebe8..902528d0 100644
--- a/src/openocd.c
+++ b/src/openocd.c
@@ -359,11 +359,11 @@ int openocd_main(int argc, char *argv[])
unregister_all_commands(cmd_ctx, NULL);
+ adapter_quit();
+
/* Shutdown commandline interface */
command_exit(cmd_ctx);
- adapter_quit();
-
free_config();
if (ERROR_FAIL == ret)
diff --git a/src/target/target.c b/src/target/target.c
index 10426023..ac2e1d03 100644
--- a/src/target/target.c
+++ b/src/target/target.c
@@ -1893,6 +1893,8 @@ static void target_destroy(struct target *target)
if (target->type->deinit_target)
target->type->deinit_target(target);
+ jtag_unregister_event_callback(jtag_enable_callback, target);
+
struct target_event_action *teap = target->event_action;
while (teap) {
struct target_event_action *next = teap->next;