Signed-off-by: hujun5 <hujun5@xiaomi.com>
This commit is contained in:
hujun5 2024-12-16 12:15:05 +08:00 committed by archer
parent c7a0288a3f
commit 7036098d23

View file

@ -76,17 +76,15 @@ static FAR struct file *files_fget_by_index(FAR struct filelist *list,
filep = &list->fl_files[l1][l2];
#ifdef CONFIG_FS_REFCOUNT
int32_t refs = 0;
if (filep->f_inode != NULL)
{
/* When the reference count is zero but the inode has not yet been
* released, At this point we should return a null pointer
*/
int32_t refs = atomic_read(&filep->f_refs);
do
{
refs = atomic_read(&filep->f_refs);
if (refs == 0)
{
filep = NULL;
@ -99,18 +97,12 @@ static FAR struct file *files_fget_by_index(FAR struct filelist *list,
{
filep = NULL;
}
else
{
do
{
if (atomic_cmpxchg(&filep->f_refs, &refs, 2))
else if (atomic_fetch_add(&filep->f_refs, 1) == 0)
{
atomic_fetch_add(&filep->f_refs, 1);
*new = true;
break;
}
}
while (!atomic_try_cmpxchg(&filep->f_refs, &refs, refs + 1));
}
#else
if (filep->f_inode == NULL && new == NULL)
{