fix: M核littlefs当文件open失败时,需要回收fd,否则会有fd泄露

close:#I3XU6R

Signed-off-by: li_zan <371442490@qq.com>
This commit is contained in:
li_zan 2021-06-25 15:35:49 +08:00
parent b55cfc1ba7
commit b458e12ed5
1 changed files with 19 additions and 10 deletions

View File

@ -59,6 +59,21 @@ LittleFsHandleStruct *LfsAllocFd(const char *fileName, int *fd)
return NULL;
}
static void LfsFreeFd(int fd)
{
pthread_mutex_lock(&g_FslocalMutex);
g_handle[fd].useFlag = 0;
if (g_handle[fd].pathName != NULL) {
free(g_handle[fd].pathName);
g_handle[fd].pathName = NULL;
}
if (g_handle[fd].lfsHandle != NULL) {
g_handle[fd].lfsHandle = NULL;
}
pthread_mutex_unlock(&g_FslocalMutex);
}
BOOL CheckFileIsOpen(const char *fileName)
{
pthread_mutex_lock(&g_FslocalMutex);
@ -285,7 +300,7 @@ static int LittlefsErrno(int result)
status = ENOTDIR;
break;
case LFS_ERR_NOENT:
status = ENFILE;
status = ENOENT;
break;
case LFS_ERR_EXIST:
status = EEXIST;
@ -608,6 +623,7 @@ int LfsOpen(const char *pathName, int openFlag, int mode)
int lfsOpenFlag = ConvertFlagToLfsOpenFlag(openFlag);
err = lfs_file_open(&(fileOpInfo->lfsInfo), &(fsHandle->file), pathName, lfsOpenFlag);
if (err != 0) {
LfsFreeFd(fd);
errno = LittlefsErrno(err);
goto errout;
}
@ -695,17 +711,10 @@ int LfsClose(int fd)
pthread_mutex_lock(&g_FslocalMutex);
ret = lfs_file_close(g_handle[fd].lfsHandle, &(g_handle[fd].file));
g_handle[fd].useFlag = 0;
if (g_handle[fd].pathName != NULL) {
free(g_handle[fd].pathName);
g_handle[fd].pathName = NULL;
}
if (g_handle[fd].lfsHandle != NULL) {
g_handle[fd].lfsHandle = NULL;
}
pthread_mutex_unlock(&g_FslocalMutex);
LfsFreeFd(fd);
if (ret != 0) {
errno = LittlefsErrno(ret);
}