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>
This commit is contained in:
Eskil Abrahamsen Blomfeldt 2022-09-01 09:08:09 +02:00
parent 20d23f7003
commit 9b6e79abbe
2 changed files with 5 additions and 5 deletions

View File

@ -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

View File

@ -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