summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
authorangryproton <[email protected]>2025-12-24 22:52:04 +0800
committerR b b666 <[email protected]>2025-12-26 21:03:26 +0800
commitec0c2bbbd8b1f894eca15be5f1d0b0f63f64fd83 (patch)
tree0dbe89632149f6b0c027acd7b8810246eab0a5d8 /components
parent239f371fcb6f4aaa4189cd6b5691c24853f76ea8 (diff)
[FIX][DFSv2][ELMFAT]修复多线程环境下lseek返回值概率性被篡改的问题
Diffstat (limited to 'components')
-rw-r--r--components/dfs/dfs_v2/filesystems/elmfat/dfs_elm.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/components/dfs/dfs_v2/filesystems/elmfat/dfs_elm.c b/components/dfs/dfs_v2/filesystems/elmfat/dfs_elm.c
index 625a7cec5e..8ddeec2d42 100644
--- a/components/dfs/dfs_v2/filesystems/elmfat/dfs_elm.c
+++ b/components/dfs/dfs_v2/filesystems/elmfat/dfs_elm.c
@@ -629,7 +629,7 @@ int dfs_elm_flush(struct dfs_file *file)
off_t dfs_elm_lseek(struct dfs_file *file, off_t offset, int wherece)
{
FRESULT result = FR_OK;
-
+ off_t pos = 0;
switch (wherece)
{
case SEEK_SET:
@@ -656,11 +656,12 @@ off_t dfs_elm_lseek(struct dfs_file *file, off_t offset, int wherece)
RT_ASSERT(fd != RT_NULL);
rt_mutex_take(&file->vnode->lock, RT_WAITING_FOREVER);
result = f_lseek(fd, offset);
+ pos = fd->fptr;
rt_mutex_release(&file->vnode->lock);
if (result == FR_OK)
{
/* return current position */
- return fd->fptr;
+ return pos;
}
}
else if (file->vnode->type == FT_DIRECTORY)