nor: fix memory leaks during probe
[fw/openocd] / src / flash / nor / stm32x.c
index 0fdd148e72df3ee3ec64fbd05a160704d0fd713d..8a3b83232c1d8806b5b3b8c4436b5a34bef76283 100644 (file)
@@ -481,7 +481,7 @@ static int stm32x_write_block(struct flash_bank *bank, uint8_t *buffer,
                return retval;
 
        /* memory buffer */
-       while (target_alloc_working_area(target, buffer_size, &source) != ERROR_OK)
+       while (target_alloc_working_area_try(target, buffer_size, &source) != ERROR_OK)
        {
                buffer_size /= 2;
                if (buffer_size <= 256)
@@ -775,6 +775,12 @@ static int stm32x_probe(struct flash_bank *bank)
        /* calculate numbers of pages */
        num_pages /= (page_size / 1024);
 
+       if (bank->sectors)
+       {
+               free(bank->sectors);
+               bank->sectors = NULL;
+       }
+
        bank->base = 0x08000000;
        bank->size = (num_pages * page_size);
        bank->num_sectors = num_pages;
@@ -1293,6 +1299,7 @@ struct flash_driver stm32x_flash = {
        .erase = stm32x_erase,
        .protect = stm32x_protect,
        .write = stm32x_write,
+       .read = default_flash_read,
        .probe = stm32x_probe,
        .auto_probe = stm32x_auto_probe,
        .erase_check = default_flash_mem_blank_check,