From 8ae9131f0aebe632d43657493123f0b918ca97b2 Mon Sep 17 00:00:00 2001 From: heyuanjie87 <943313837@qq.com> Date: Tue, 14 Jan 2025 20:58:37 +0800 Subject: [PATCH 1/2] =?UTF-8?q?[dfs]mmap=E7=9A=84=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=9C=A8=E5=85=B3=E9=97=AD=E5=90=8E=E9=87=8A=E6=94=BEfile?= =?UTF-8?q?=E6=8C=87=E9=92=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/dfs/dfs_v2/include/dfs.h | 3 +++ components/dfs/dfs_v2/src/dfs.c | 32 ++++++++++++++++++++--- components/dfs/dfs_v2/src/dfs_file_mmap.c | 1 + 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/components/dfs/dfs_v2/include/dfs.h b/components/dfs/dfs_v2/include/dfs.h index 8b8c80188f8..eb9dfc4873d 100644 --- a/components/dfs/dfs_v2/include/dfs.h +++ b/components/dfs/dfs_v2/include/dfs.h @@ -141,6 +141,9 @@ struct dfs_fdtable *dfs_fdtable_get_global(void); int dfs_dup(int oldfd, int startfd); #endif /* DFS_USING_POSIX */ +struct dfs_file* dfs_empty_file_alloc(void); +void dfs_file_free(struct dfs_file *file); + #ifdef __cplusplus } #endif diff --git a/components/dfs/dfs_v2/src/dfs.c b/components/dfs/dfs_v2/src/dfs.c index 527ba896271..f412987e00a 100644 --- a/components/dfs/dfs_v2/src/dfs.c +++ b/components/dfs/dfs_v2/src/dfs.c @@ -190,6 +190,33 @@ int dfs_init(void) } INIT_PREV_EXPORT(dfs_init); +struct dfs_file* dfs_empty_file_alloc(void) +{ + struct dfs_file *file; + + file = (struct dfs_file *)rt_calloc(1, sizeof(struct dfs_file)); + if (file) + { + file->magic = DFS_FD_MAGIC; + file->ref_count = 1; + rt_mutex_init(&file->pos_lock, "fpos", RT_IPC_FLAG_PRIO); + } + + return file; +} + +void dfs_file_free(struct dfs_file *file) +{ + rt_mutex_detach(&file->pos_lock); + + if (file->mmap_context) + { + rt_free(file->mmap_context); + } + + rt_free(file); +} + /** * @ingroup Fd * This function will allocate a file descriptor. @@ -217,13 +244,10 @@ int fdt_fd_new(struct dfs_fdtable *fdt) { struct dfs_file *file; - file = (struct dfs_file *)rt_calloc(1, sizeof(struct dfs_file)); + file = dfs_empty_file_alloc(); if (file) { - file->magic = DFS_FD_MAGIC; - file->ref_count = 1; - rt_mutex_init(&file->pos_lock, "fpos", RT_IPC_FLAG_PRIO); fdt->fds[idx] = file; LOG_D("allocate a new fd @ %d", idx); diff --git a/components/dfs/dfs_v2/src/dfs_file_mmap.c b/components/dfs/dfs_v2/src/dfs_file_mmap.c index b976a85a270..89cd18e21d0 100644 --- a/components/dfs/dfs_v2/src/dfs_file_mmap.c +++ b/components/dfs/dfs_v2/src/dfs_file_mmap.c @@ -152,6 +152,7 @@ static void on_varea_close(struct rt_varea *varea) if (rt_atomic_load(&(file->ref_count)) == 1) { dfs_file_close(file); + dfs_file_free(file); } else { From 0d624e2d95973ec91984919aadfafcd35efb9e5e Mon Sep 17 00:00:00 2001 From: heyuanjie87 <943313837@qq.com> Date: Wed, 15 Jan 2025 11:08:08 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=87=BD=E6=95=B0?= =?UTF-8?q?=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/dfs/dfs_v2/include/dfs.h | 4 ++-- components/dfs/dfs_v2/src/dfs.c | 15 ++++----------- components/dfs/dfs_v2/src/dfs_file_mmap.c | 2 +- 3 files changed, 7 insertions(+), 14 deletions(-) diff --git a/components/dfs/dfs_v2/include/dfs.h b/components/dfs/dfs_v2/include/dfs.h index eb9dfc4873d..582ec428aca 100644 --- a/components/dfs/dfs_v2/include/dfs.h +++ b/components/dfs/dfs_v2/include/dfs.h @@ -141,8 +141,8 @@ struct dfs_fdtable *dfs_fdtable_get_global(void); int dfs_dup(int oldfd, int startfd); #endif /* DFS_USING_POSIX */ -struct dfs_file* dfs_empty_file_alloc(void); -void dfs_file_free(struct dfs_file *file); +struct dfs_file* dfs_file_create(void); +void dfs_file_destroy(struct dfs_file *file); #ifdef __cplusplus } diff --git a/components/dfs/dfs_v2/src/dfs.c b/components/dfs/dfs_v2/src/dfs.c index f412987e00a..7e6b2c14ad4 100644 --- a/components/dfs/dfs_v2/src/dfs.c +++ b/components/dfs/dfs_v2/src/dfs.c @@ -190,7 +190,7 @@ int dfs_init(void) } INIT_PREV_EXPORT(dfs_init); -struct dfs_file* dfs_empty_file_alloc(void) +struct dfs_file* dfs_file_create(void) { struct dfs_file *file; @@ -205,7 +205,7 @@ struct dfs_file* dfs_empty_file_alloc(void) return file; } -void dfs_file_free(struct dfs_file *file) +void dfs_file_destroy(struct dfs_file *file) { rt_mutex_detach(&file->pos_lock); @@ -244,7 +244,7 @@ int fdt_fd_new(struct dfs_fdtable *fdt) { struct dfs_file *file; - file = dfs_empty_file_alloc(); + file = dfs_file_create(); if (file) { @@ -279,14 +279,7 @@ void fdt_fd_release(struct dfs_fdtable *fdt, int fd) if (file && file->ref_count == 1) { - rt_mutex_detach(&file->pos_lock); - - if (file->mmap_context) - { - rt_free(file->mmap_context); - } - - rt_free(file); + dfs_file_destroy(file); } else { diff --git a/components/dfs/dfs_v2/src/dfs_file_mmap.c b/components/dfs/dfs_v2/src/dfs_file_mmap.c index 89cd18e21d0..1555ae06874 100644 --- a/components/dfs/dfs_v2/src/dfs_file_mmap.c +++ b/components/dfs/dfs_v2/src/dfs_file_mmap.c @@ -152,7 +152,7 @@ static void on_varea_close(struct rt_varea *varea) if (rt_atomic_load(&(file->ref_count)) == 1) { dfs_file_close(file); - dfs_file_free(file); + dfs_file_destroy(file); } else {