From 8f02730e1f44d00fe72e864ecb461883ec56f098 Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Wed, 19 Apr 2017 15:03:30 +0800 Subject: [PATCH] fat/sdmmc: unmount FATFS object on error MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Failure to call f_mount(NULL,...) makes FATFS attempt to clean up the old FS object upon next mount. If previous mount operation has failed, some parts of FS object may not be fully initialized, which will cause errors (such as attempting to delete a mutex which wasn’t allocated). --- components/fatfs/src/vfs_fat_sdmmc.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/components/fatfs/src/vfs_fat_sdmmc.c b/components/fatfs/src/vfs_fat_sdmmc.c index a9e5362dc..edbc2c12e 100644 --- a/components/fatfs/src/vfs_fat_sdmmc.c +++ b/components/fatfs/src/vfs_fat_sdmmc.c @@ -34,6 +34,7 @@ esp_err_t esp_vfs_fat_sdmmc_mount(const char* base_path, { const size_t workbuf_size = 4096; void* workbuf = NULL; + FATFS* fs = NULL; if (s_card != NULL) { return ESP_ERR_INVALID_STATE; @@ -82,7 +83,6 @@ esp_err_t esp_vfs_fat_sdmmc_mount(const char* base_path, char drv[3] = {(char)('0' + pdrv), ':', 0}; // connect FATFS to VFS - FATFS* fs; err = esp_vfs_fat_register(base_path, drv, mount_config->max_files, &fs); if (err == ESP_ERR_INVALID_STATE) { // it's okay, already registered with VFS @@ -129,6 +129,9 @@ esp_err_t esp_vfs_fat_sdmmc_mount(const char* base_path, fail: sdmmc_host_deinit(); free(workbuf); + if (fs) { + f_mount(NULL, drv, 0); + } esp_vfs_fat_unregister_path(base_path); ff_diskio_unregister(pdrv); free(s_card);