Skip to content

Commit 6b5529c

Browse files
committed
Fix(denumerator): close GFileEnumerator when enumeration finishes
Close and release GFileEnumerator after all entries are consumed to prevent file descriptor leak on GVFS mount points (e.g. Vault). 枚举完成后关闭并释放GFileEnumerator,防止GVFS挂载点(如保险箱)的文件描述符泄漏。 Log: 修复枚举器耗尽后fd未释放的问题 Bug: https://pms.uniontech.com/bug-view-358881.html Influence: 修复遍历Vault等GVFS目录后文件描述符一直被占用的问题,枚举完成后正确释放资源。
1 parent 203d828 commit 6b5529c

2 files changed

Lines changed: 13 additions & 8 deletions

File tree

src/dfm-io/dfm-io/denumerator.cpp

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// SPDX-FileCopyrightText: 2020 - 2023 UnionTech Software Technology Co., Ltd.
1+
// SPDX-FileCopyrightText: 2020 - 2026 UnionTech Software Technology Co., Ltd.
22
//
33
// SPDX-License-Identifier: GPL-3.0-or-later
44

@@ -644,12 +644,6 @@ bool DEnumerator::hasNext() const
644644

645645
g_object_unref(nextInfo);
646646

647-
if (gerror) {
648-
d->setErrorFromGError(gerror);
649-
g_error_free(gerror);
650-
gerror = nullptr;
651-
}
652-
653647
if (!d->checkFilter())
654648
return this->hasNext();
655649

@@ -659,9 +653,20 @@ bool DEnumerator::hasNext() const
659653
// nextInfo == NULL: either finished or an error occurred
660654
if (gerror) {
661655
d->setErrorFromGError(gerror);
656+
d->nextUrl = QUrl();
657+
d->dfileInfoNext.reset();
662658
return true;
663659
}
664660

661+
// 枚举完成,关闭并释放当前枚举器,释放 fd
662+
if (!d->stackEnumerator.isEmpty()) {
663+
GFileEnumerator *enumerator = d->stackEnumerator.pop();
664+
if (enumerator) {
665+
g_file_enumerator_close(enumerator, nullptr, nullptr);
666+
g_object_unref(enumerator);
667+
}
668+
}
669+
665670
return false;
666671
}
667672

src/dfm-io/dfm-io/private/denumerator_p.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// SPDX-FileCopyrightText: 2020 - 2023 UnionTech Software Technology Co., Ltd.
1+
// SPDX-FileCopyrightText: 2020 - 2026 UnionTech Software Technology Co., Ltd.
22
//
33
// SPDX-License-Identifier: GPL-3.0-or-later
44

0 commit comments

Comments
 (0)