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:
parent
20d23f7003
commit
9b6e79abbe
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user