X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Ftarget%2Ftarget.c;h=b4bf5d3554ae9d4a77eba524cb02df9b735e9e41;hp=3d33a43dc71982779223caa1d1b34a81869243f6;hb=270725f8ad7e7b9857bae16b8f78d73fe55a3401;hpb=71eeda5da1f840a19e1a0ac97fceda8b8457ba1e;ds=sidebyside diff --git a/src/target/target.c b/src/target/target.c index 3d33a43dc7..b4bf5d3554 100644 --- a/src/target/target.c +++ b/src/target/target.c @@ -1949,6 +1949,14 @@ static void target_free_all_working_areas_restore(struct target *target, int res void target_free_all_working_areas(struct target *target) { target_free_all_working_areas_restore(target, 1); + + /* Now we have none or only one working area marked as free */ + if (target->working_areas) { + /* Free the last one to allow on-the-fly moving and resizing */ + free(target->working_areas->backup); + free(target->working_areas); + target->working_areas = NULL; + } } /* Find the largest number of bytes that can be allocated */ @@ -1989,11 +1997,6 @@ static void target_destroy(struct target *target) } target_free_all_working_areas(target); - /* Now we have none or only one working area marked as free */ - if (target->working_areas) { - free(target->working_areas->backup); - free(target->working_areas); - } /* release the targets SMP list */ if (target->smp) {