diff options
| author | Junjie Wang <[email protected]> | 2023-08-03 15:42:54 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-08-03 15:42:54 +0800 |
| commit | b3831246c2a8987b2f34cb58bee37dd41113fd06 (patch) | |
| tree | d8923fd277f51a6ff7dbd6703069292fdd3147e8 /components | |
| parent | d5c9dc09a0e9218433e4bbc0f6ab7af156a71580 (diff) | |
[DFS_V1] 修复close失败后不释放fd导致内存被永久占用且无法释放 (#7907)
Diffstat (limited to 'components')
| -rw-r--r-- | components/dfs/dfs_v1/filesystems/elmfat/dfs_elm.c | 8 | ||||
| -rw-r--r-- | components/dfs/dfs_v1/src/dfs_file.c | 7 | ||||
| -rw-r--r-- | components/dfs/dfs_v1/src/dfs_posix.c | 3 |
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); |
