From 02b2c9a6f9f8595adddd1f0970ff33d68b1fdc98 Mon Sep 17 00:00:00 2001 From: Liu Zheng Date: Wed, 15 Jul 2026 16:44:28 +0800 Subject: [PATCH] fix(service): register D-Bus object before service name to close race MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Register the /com/deepin/logviewer object before requesting the well-known name, so the object tree is ready once the name is visible. 先注册对象再注册服务名,消除名称已注册但对象未注册的竞态窗口, 避免 busctl tree 间歇性报 "No such object path '/'"。 Log: 修复服务列表获取间歇性失败的问题 Influence: D-Bus 按需激活后,客户端首次 introspect 不再因竞态丢失对象树, busctl tree 获取服务对象列表稳定可用。 --- logViewerService/main.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/logViewerService/main.cpp b/logViewerService/main.cpp index b2d6711b..0d51fae3 100644 --- a/logViewerService/main.cpp +++ b/logViewerService/main.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2019 - 2023 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -58,10 +58,9 @@ int main(int argc, char *argv[]) Dtk::Core::DLogManager::registerFileAppender(); #endif QDBusConnection systemBus = QDBusConnection::systemBus(); - if (!systemBus.registerService(LogViewrServiceName)) { - qCCritical(logService) << "registerService failed:" << systemBus.lastError(); - exit(0x0001); - } + // 先注册对象再注册服务名:well-known name 一旦对外可见,/com/deepin/logviewer + // 对象必然已就绪,消除名称已注册但对象尚未注册的竞态窗口 + // (表现为 busctl tree 间歇性 "No such object path '/'")。 LogViewerService service; if (!systemBus.registerObject(LogViewrPath, &service, @@ -69,5 +68,9 @@ int main(int argc, char *argv[]) qCCritical(logService) << "registerObject failed:" << systemBus.lastError(); exit(0x0002); } + if (!systemBus.registerService(LogViewrServiceName)) { + qCCritical(logService) << "registerService failed:" << systemBus.lastError(); + exit(0x0001); + } return a.exec(); }