From 22a86fd7a287e16522bef80d4a89f399ce654cc3 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Tue, 7 May 2024 18:42:55 +0100 Subject: session-lock: don't allow events from rejected locks fixes #5913 --- src/protocols/SessionLock.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src/protocols/SessionLock.cpp') diff --git a/src/protocols/SessionLock.cpp b/src/protocols/SessionLock.cpp index 19582be4..db3404be 100644 --- a/src/protocols/SessionLock.cpp +++ b/src/protocols/SessionLock.cpp @@ -113,6 +113,11 @@ CSessionLock::CSessionLock(SP resource_) : resource(resource_ }); resource->setUnlockAndDestroy([this](CExtSessionLockV1* r) { + if (inert) { + PROTO::sessionLock->destroyResource(this); + return; + } + events.unlockAndDestroy.emit(); inert = true; PROTO::sessionLock->locked = false; @@ -132,6 +137,11 @@ bool CSessionLock::good() { return resource->resource(); } +void CSessionLock::sendDenied() { + inert = true; + resource->sendFinished(); +} + CSessionLockProtocol::CSessionLockProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { ; } @@ -171,8 +181,8 @@ void CSessionLockProtocol::onLock(CExtSessionLockManagerV1* pMgr, uint32_t id) { if (m_vLocks.size() > 1) { LOGM(ERR, "Tried to lock a locked session"); - RESOURCE->resource->sendFinished(); RESOURCE->inert = true; + RESOURCE->resource->sendFinished(); return; } -- cgit v1.2.3