From a438e1f2c753f4dca7ced85be15068acca75eb2c Mon Sep 17 00:00:00 2001 From: gongheng Date: Tue, 28 Apr 2026 20:03:23 +0800 Subject: [PATCH] Fix(denumerator): close GFileEnumerator when enumeration finishes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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目录后文件描述符一直被占用的问题,枚举完成后正确释放资源。 --- include/dfm-io/dfm-io/denumerator.h | 2 +- src/dfm-io/dfm-io/denumerator.cpp | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/include/dfm-io/dfm-io/denumerator.h b/include/dfm-io/dfm-io/denumerator.h index 69438d04..dc826272 100644 --- a/include/dfm-io/dfm-io/denumerator.h +++ b/include/dfm-io/dfm-io/denumerator.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2020 - 2023 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2020 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/dfm-io/dfm-io/denumerator.cpp b/src/dfm-io/dfm-io/denumerator.cpp index 21a93230..541244c5 100644 --- a/src/dfm-io/dfm-io/denumerator.cpp +++ b/src/dfm-io/dfm-io/denumerator.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2020 - 2023 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2020 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -654,6 +654,15 @@ bool DEnumerator::hasNext() const return true; } + // 枚举完成,关闭并释放当前枚举器,释放 fd + if (!d->stackEnumerator.isEmpty()) { + GFileEnumerator *enumerator = d->stackEnumerator.pop(); + if (enumerator) { + g_file_enumerator_close(enumerator, nullptr, nullptr); + g_object_unref(enumerator); + } + } + return false; }