This is an automated email from the ASF dual-hosted git repository. xiaoxiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
The following commit(s) were added to refs/heads/master by this push: new 6d3ccf3 fs: move out nx_close from filelock 6d3ccf3 is described below commit 6d3ccf37abc90a8263bf3181d85c80b086825495 Author: ligd <liguidi...@xiaomi.com> AuthorDate: Thu Jun 24 22:06:29 2021 +0800 fs: move out nx_close from filelock If the close is blocked(like net close timeout 5s), then other file operation can't access in this 5s. Change-Id: Ia6c4ec88d90db0330134d0aaa30e94cb71c8a066 Signed-off-by: ligd <liguidi...@xiaomi.com> --- fs/inode/fs_files.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/fs/inode/fs_files.c b/fs/inode/fs_files.c index 738c3ce..50ec037 100644 --- a/fs/inode/fs_files.c +++ b/fs/inode/fs_files.c @@ -483,6 +483,8 @@ int dup2(int fd1, int fd2) int nx_close(int fd) { FAR struct filelist *list; + FAR struct file *filep; + FAR struct file file; int ret; /* Get the thread-specific file list. It should never be NULL in this @@ -510,11 +512,14 @@ int nx_close(int fd) return -EBADF; } - ret = file_close(&list->fl_files[fd / CONFIG_NFILE_DESCRIPTORS_PER_BLOCK] - [fd % CONFIG_NFILE_DESCRIPTORS_PER_BLOCK]); + filep = &list->fl_files[fd / CONFIG_NFILE_DESCRIPTORS_PER_BLOCK] + [fd % CONFIG_NFILE_DESCRIPTORS_PER_BLOCK]; + memcpy(&file, filep, sizeof(struct file)); + memset(filep, 0, sizeof(struct file)); + _files_semgive(list); - return ret; + return file_close(&file); } /****************************************************************************