summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
authorJunjie Wang <[email protected]>2023-08-03 15:42:54 +0800
committerGitHub <[email protected]>2023-08-03 15:42:54 +0800
commitb3831246c2a8987b2f34cb58bee37dd41113fd06 (patch)
treed8923fd277f51a6ff7dbd6703069292fdd3147e8 /components
parentd5c9dc09a0e9218433e4bbc0f6ab7af156a71580 (diff)
[DFS_V1] 修复close失败后不释放fd导致内存被永久占用且无法释放 (#7907)
Diffstat (limited to 'components')
-rw-r--r--components/dfs/dfs_v1/filesystems/elmfat/dfs_elm.c8
-rw-r--r--components/dfs/dfs_v1/src/dfs_file.c7
-rw-r--r--components/dfs/dfs_v1/src/dfs_posix.c3
3 files changed, 4 insertions, 14 deletions
diff --git a/components/dfs/dfs_v1/filesystems/elmfat/dfs_elm.c b/components/dfs/dfs_v1/filesystems/elmfat/dfs_elm.c
index e9680e07bf..5adba36f16 100644
--- a/components/dfs/dfs_v1/filesystems/elmfat/dfs_elm.c
+++ b/components/dfs/dfs_v1/filesystems/elmfat/dfs_elm.c
@@ -491,11 +491,9 @@ int dfs_elm_close(struct dfs_file *file)
RT_ASSERT(fd != RT_NULL);
result = f_close(fd);
- if (result == FR_OK)
- {
- /* release memory */
- rt_free(fd);
- }
+
+ /* release memory */
+ rt_free(fd);
}
return elm_result_to_dfs(result);
diff --git a/components/dfs/dfs_v1/src/dfs_file.c b/components/dfs/dfs_v1/src/dfs_file.c
index e8594d8bae..3a7e626f20 100644
--- a/components/dfs/dfs_v1/src/dfs_file.c
+++ b/components/dfs/dfs_v1/src/dfs_file.c
@@ -309,13 +309,6 @@ int dfs_file_close(struct dfs_file *fd)
result = vnode->fops->close(fd);
}
- /* close fd error, return */
- if (result < 0)
- {
- dfs_fm_unlock();
- return result;
- }
-
if (vnode->ref_count == 1)
{
/* remove from hash */
diff --git a/components/dfs/dfs_v1/src/dfs_posix.c b/components/dfs/dfs_v1/src/dfs_posix.c
index b0b7e3dd16..07276a8c95 100644
--- a/components/dfs/dfs_v1/src/dfs_posix.c
+++ b/components/dfs/dfs_v1/src/dfs_posix.c
@@ -146,6 +146,7 @@ int close(int fd)
}
result = dfs_file_close(d);
+ fd_release(fd);
if (result < 0)
{
@@ -154,8 +155,6 @@ int close(int fd)
return -1;
}
- fd_release(fd);
-
return 0;
}
RTM_EXPORT(close);