From 77f44bfcab6c3e553d26a776c011613efbfe6cfd Mon Sep 17 00:00:00 2001 From: Vaxry Date: Sat, 15 Jun 2024 17:56:44 +0200 Subject: [PATCH] output: avoid crashes when binding a defunct wl_output global ref #6508 --- src/protocols/core/Output.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/protocols/core/Output.cpp b/src/protocols/core/Output.cpp index 90358fa5..10daa15e 100644 --- a/src/protocols/core/Output.cpp +++ b/src/protocols/core/Output.cpp @@ -9,6 +9,9 @@ CWLOutputResource::CWLOutputResource(SP resource_, SP pMoni pClient = resource->client(); + if (!monitor) + return; + resource->setOnDestroy([this](CWlOutput* r) { if (monitor && PROTO::outputs.contains(monitor->szName)) PROTO::outputs.at(monitor->szName)->destroyResource(this); @@ -69,6 +72,9 @@ CWLOutputProtocol::CWLOutputProtocol(const wl_interface* iface, const int& ver, } void CWLOutputProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { + if (defunct) + Debug::log(WARN, "[wl_output] Binding a wl_output that's inert?? Possible client bug."); + const auto RESOURCE = m_vOutputs.emplace_back(makeShared(makeShared(client, ver, id), monitor.lock())); if (!RESOURCE->good()) {