From 00b2180fe86c1c8f2008f28bc12e489e3208ab8e Mon Sep 17 00:00:00 2001 From: BLumia Date: Tue, 27 Oct 2026 18:59:17 +0800 Subject: [PATCH] fix: move PowerOff/Reboot before prepareShutdown to avoid shutdown race prepareShutdown() starts dde-session-shutdown.target which declares Conflicts=dde-session-manager.service. systemd stops the current process before PowerOff/Reboot is called, causing the machine to black-screen but not power off. Moving the login1 PowerOff/Reboot call before prepareShutdown() ensures the shutdown/reboot request is received first. DDE-490 --- src/dde-session/impl/sessionmanager.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/dde-session/impl/sessionmanager.cpp b/src/dde-session/impl/sessionmanager.cpp index cd69dfe..42db451 100644 --- a/src/dde-session/impl/sessionmanager.cpp +++ b/src/dde-session/impl/sessionmanager.cpp @@ -947,10 +947,9 @@ void SessionManager::startBlackWidget() void SessionManager::shutdown(bool force) { startBlackWidget(); + QDBusPendingReply<> reply = m_login1ManagerInter->PowerOff(false); prepareShutdown(force); clearCurrentTty(); - - QDBusPendingReply<> reply = m_login1ManagerInter->PowerOff(false); if (reply.isError()) { qWarning() << "failed to power off, error: " << reply.error().name(); } @@ -961,10 +960,9 @@ void SessionManager::shutdown(bool force) void SessionManager::reboot(bool force) { startBlackWidget(); + QDBusPendingReply<> reply = m_login1ManagerInter->Reboot(false); prepareShutdown(force); clearCurrentTty(); - - QDBusPendingReply<> reply = m_login1ManagerInter->Reboot(false); if (reply.isError()) { qWarning() << "failed to reboot, error: " << reply.error().name(); }