From f1ef724a87b29a7937cfc328e0c7ea9445a90050 Mon Sep 17 00:00:00 2001 From: Ikalco <73481042+ikalco@users.noreply.github.com> Date: Sun, 2 Mar 2025 18:57:49 -0600 Subject: [PATCH] protocols: Ensure protocol dtors are called in ProtocolManager dtor (#9521) --- src/managers/ProtocolManager.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/managers/ProtocolManager.cpp b/src/managers/ProtocolManager.cpp index 621a5335..992ace20 100644 --- a/src/managers/ProtocolManager.cpp +++ b/src/managers/ProtocolManager.cpp @@ -69,6 +69,11 @@ #include #include +// ******************************************************************************************** +// * IMPORTANT: make sure to .reset() any protocol UP's you create! (put reset in destructor) * +// * otherwise Hyprland might crash when exiting. * +// ******************************************************************************************** + void CProtocolManager::onMonitorModeChange(PHLMONITOR pMonitor) { const bool ISMIRROR = pMonitor->isMirror(); @@ -177,6 +182,7 @@ CProtocolManager::CProtocolManager() { PROTO::hyprlandSurface = makeUnique(&hyprland_surface_manager_v1_interface, 2, "HyprlandSurface"); PROTO::contentType = makeUnique(&wp_content_type_manager_v1_interface, 1, "ContentType"); PROTO::colorManagement = makeUnique(&wp_color_manager_v1_interface, 1, "ColorManagement", *PDEBUGCM); + // please read the top of this file before adding another protocol if (*PENABLEXXCM) { PROTO::xxColorManagement = makeUnique(&xx_color_manager_v4_interface, 1, "XXColorManagement"); @@ -257,6 +263,10 @@ CProtocolManager::~CProtocolManager() { PROTO::securityContext.reset(); PROTO::ctm.reset(); PROTO::hyprlandSurface.reset(); + PROTO::contentType.reset(); + PROTO::colorManagement.reset(); + PROTO::xxColorManagement.reset(); + PROTO::frogColorManagement.reset(); PROTO::lease.reset(); PROTO::sync.reset();