summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms
diff options
context:
space:
mode:
authorEskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>2022-09-01 09:08:09 +0200
committerEskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>2022-09-05 18:29:11 +0200
commit9b6e79abbe66cc098ff8587c2f494716d920c4ea (patch)
tree81d0638e1b522617b8bbffa6a39efee54d89232c /src/plugins/platforms
parent20d23f70036b7653f2eadcdd6dd45addd300cea4 (diff)
Fix crash when setting override cursor on multiple clients
When a client disconnects, we need to disable its client cursor, otherwise there will be a dangling pointer stored in the pointer. In addition, we should reinstate the default cursor only when all clients have disconnected. Note: Patch provided in bug report. [ChangeLog][vnc] Fixed a crash when setting an override cursor on multiple clients. Pick-to: 5.15 6.2 6.4 Fixes: QTBUG-105057 Change-Id: I0399087a924c05c8d0811b0ec0305b7857da5d3c Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Diffstat (limited to 'src/plugins/platforms')
-rw-r--r--src/plugins/platforms/vnc/qvnc.cpp5
-rw-r--r--src/plugins/platforms/vnc/qvncscreen.cpp5
2 files changed, 5 insertions, 5 deletions
diff --git a/src/plugins/platforms/vnc/qvnc.cpp b/src/plugins/platforms/vnc/qvnc.cpp
index d09c6789b7..60aae51100 100644
--- a/src/plugins/platforms/vnc/qvnc.cpp
+++ b/src/plugins/platforms/vnc/qvnc.cpp
@@ -635,11 +635,10 @@ void QVncServer::newConnection()
void QVncServer::discardClient(QVncClient *client)
{
clients.removeOne(client);
+ qvnc_screen->disableClientCursor(client);
client->deleteLater();
- if (clients.isEmpty()) {
- qvnc_screen->disableClientCursor(client);
+ if (clients.isEmpty())
qvnc_screen->setPowerState(QPlatformScreen::PowerStateOff);
- }
}
inline QImage QVncServer::screenImage() const
diff --git a/src/plugins/platforms/vnc/qvncscreen.cpp b/src/plugins/platforms/vnc/qvncscreen.cpp
index eb8241138e..c67e5a0073 100644
--- a/src/plugins/platforms/vnc/qvncscreen.cpp
+++ b/src/plugins/platforms/vnc/qvncscreen.cpp
@@ -113,9 +113,10 @@ void QVncScreen::disableClientCursor(QVncClient *client)
if (clientCount == 0) {
delete clientCursor;
clientCursor = nullptr;
- }
- mCursor = new QFbCursor(this);
+ if (mCursor == nullptr)
+ mCursor = new QFbCursor(this);
+ }
#else
Q_UNUSED(client);
#endif