diff --git a/fs/fat/os_adapt/fatfs.c b/fs/fat/os_adapt/fatfs.c index dc5070a9a4d1ad10a4390ac2580f8d204f4bcd2a..fcd472a5c7251b98549ed0a557e01ae7fd5d81be 100644 --- a/fs/fat/os_adapt/fatfs.c +++ b/fs/fat/os_adapt/fatfs.c @@ -576,7 +576,7 @@ int fatfs_open(struct file *filep) ret = lock_fs(fs); if (ret == FALSE) { ret = EBUSY; - goto ERROR_EXIT; + goto ERROR_FREE; } fp->dir_sect = dp->sect; @@ -595,7 +595,7 @@ int fatfs_open(struct file *filep) fp->buf = (BYTE*) ff_memalloc(SS(fs)); if (fp->buf == NULL) { ret = ENOMEM; - goto ERROR_FREE; + goto ERROR_UNLOCK; } LOS_ListAdd(&finfo->fp_list, &fp->fp_entry); unlock_fs(fs, FR_OK); @@ -603,8 +603,9 @@ int fatfs_open(struct file *filep) filep->f_priv = fp; return fatfs_sync(vp->originMount->mountFlags, fs); -ERROR_FREE: +ERROR_UNLOCK: unlock_fs(fs, FR_OK); +ERROR_FREE: free(fp); ERROR_EXIT: return -ret;