diff options
author | Mårten Nordheim <marten.nordheim@qt.io> | 2020-05-05 14:27:57 +0200 |
---|---|---|
committer | Mårten Nordheim <marten.nordheim@qt.io> | 2020-05-05 16:44:36 +0200 |
commit | 393fcf8a64748f0c59f47d254667518dba9e2fc3 (patch) | |
tree | 6e2c31ad35f37894fb8527444c6a0e1d5d3b17c4 /src/websockets/qwebsocket_p.cpp | |
parent | b93474cc1a5e5800cad676954c0bbf56f72e946b (diff) | |
download | qtwebsockets-393fcf8a64748f0c59f47d254667518dba9e2fc3.tar.gz |
Make sure child QObjects get moved-to-thread along with the owner
By parenting them. And to do that without crashing they need to be
allocated dynamically.
A couple missed "parenting"s caused the object to not be moved to the
other thread when the websocket was moved. This caused it to print
warnings when the timer was started and stopped since this cannot be
done across threads.
Fixes: QTBUG-83722
Pick-to: 5.15
Change-Id: Iee60fe1c498f8f6d1e0c2cfcb2923bd5b9560acb
Reviewed-by: Jesus Fernandez <jsfdez@gmail.com>
Diffstat (limited to 'src/websockets/qwebsocket_p.cpp')
-rw-r--r-- | src/websockets/qwebsocket_p.cpp | 33 |
1 files changed, 16 insertions, 17 deletions
diff --git a/src/websockets/qwebsocket_p.cpp b/src/websockets/qwebsocket_p.cpp index 6d90ea6..cad6506 100644 --- a/src/websockets/qwebsocket_p.cpp +++ b/src/websockets/qwebsocket_p.cpp @@ -108,7 +108,6 @@ QWebSocketPrivate::QWebSocketPrivate(const QString &origin, QWebSocketProtocol:: m_closeCode(QWebSocketProtocol::CloseCodeNormal), m_closeReason(), m_pingTimer(), - m_dataProcessor(), m_configuration(), m_pMaskGenerator(&m_defaultMaskGenerator), m_defaultMaskGenerator(), @@ -141,7 +140,6 @@ QWebSocketPrivate::QWebSocketPrivate(QTcpSocket *pTcpSocket, QWebSocketProtocol: m_closeCode(QWebSocketProtocol::CloseCodeNormal), m_closeReason(), m_pingTimer(), - m_dataProcessor(), m_configuration(), m_pMaskGenerator(&m_defaultMaskGenerator), m_defaultMaskGenerator(), @@ -159,6 +157,7 @@ void QWebSocketPrivate::init() Q_ASSERT(q_ptr); Q_ASSERT(m_pMaskGenerator); + m_dataProcessor->setParent(q_ptr); m_pMaskGenerator->seed(); if (m_pSocket) { @@ -403,7 +402,7 @@ void QWebSocketPrivate::open(const QNetworkRequest &request, bool mask) } //if (m_url != url) if (Q_LIKELY(!m_pSocket)) { - m_dataProcessor.clear(); + m_dataProcessor->clear(); m_isClosingHandshakeReceived = false; m_isClosingHandshakeSent = false; @@ -642,21 +641,21 @@ void QWebSocketPrivate::makeConnections(QTcpSocket *pTcpSocket) } } - QObject::connect(&m_dataProcessor, &QWebSocketDataProcessor::textFrameReceived, q, + QObject::connect(m_dataProcessor, &QWebSocketDataProcessor::textFrameReceived, q, &QWebSocket::textFrameReceived); - QObject::connect(&m_dataProcessor, &QWebSocketDataProcessor::binaryFrameReceived, q, + QObject::connect(m_dataProcessor, &QWebSocketDataProcessor::binaryFrameReceived, q, &QWebSocket::binaryFrameReceived); - QObject::connect(&m_dataProcessor, &QWebSocketDataProcessor::binaryMessageReceived, q, + QObject::connect(m_dataProcessor, &QWebSocketDataProcessor::binaryMessageReceived, q, &QWebSocket::binaryMessageReceived); - QObject::connect(&m_dataProcessor, &QWebSocketDataProcessor::textMessageReceived, q, + QObject::connect(m_dataProcessor, &QWebSocketDataProcessor::textMessageReceived, q, &QWebSocket::textMessageReceived); - QObjectPrivate::connect(&m_dataProcessor, &QWebSocketDataProcessor::errorEncountered, this, + QObjectPrivate::connect(m_dataProcessor, &QWebSocketDataProcessor::errorEncountered, this, &QWebSocketPrivate::close); - QObjectPrivate::connect(&m_dataProcessor, &QWebSocketDataProcessor::pingReceived, this, + QObjectPrivate::connect(m_dataProcessor, &QWebSocketDataProcessor::pingReceived, this, &QWebSocketPrivate::processPing); - QObjectPrivate::connect(&m_dataProcessor, &QWebSocketDataProcessor::pongReceived, this, + QObjectPrivate::connect(m_dataProcessor, &QWebSocketDataProcessor::pongReceived, this, &QWebSocketPrivate::processPong); - QObjectPrivate::connect(&m_dataProcessor, &QWebSocketDataProcessor::closeReceived, this, + QObjectPrivate::connect(m_dataProcessor, &QWebSocketDataProcessor::closeReceived, this, &QWebSocketPrivate::processClose); //fire readyread, in case we already have data inside the tcpSocket @@ -671,7 +670,7 @@ void QWebSocketPrivate::releaseConnections(const QTcpSocket *pTcpSocket) { if (Q_LIKELY(pTcpSocket)) pTcpSocket->disconnect(); - m_dataProcessor.disconnect(); + m_dataProcessor->disconnect(); } /*! @@ -1201,7 +1200,7 @@ void QWebSocketPrivate::processData() if (!m_pSocket->canReadLine()) return; processHandshake(m_pSocket); - } else if (!m_dataProcessor.process(m_pSocket)) { + } else if (!m_dataProcessor->process(m_pSocket)) { return; } } @@ -1331,7 +1330,7 @@ void QWebSocketPrivate::setSocketState(QAbstractSocket::SocketState state) */ void QWebSocketPrivate::setMaxAllowedIncomingFrameSize(quint64 maxAllowedIncomingFrameSize) { - m_dataProcessor.setMaxAllowedFrameSize(maxAllowedIncomingFrameSize); + m_dataProcessor->setMaxAllowedFrameSize(maxAllowedIncomingFrameSize); } /*! @@ -1339,7 +1338,7 @@ void QWebSocketPrivate::setMaxAllowedIncomingFrameSize(quint64 maxAllowedIncomin */ quint64 QWebSocketPrivate::maxAllowedIncomingFrameSize() const { - return m_dataProcessor.maxAllowedFrameSize(); + return m_dataProcessor->maxAllowedFrameSize(); } /*! @@ -1347,7 +1346,7 @@ quint64 QWebSocketPrivate::maxAllowedIncomingFrameSize() const */ void QWebSocketPrivate::setMaxAllowedIncomingMessageSize(quint64 maxAllowedIncomingMessageSize) { - m_dataProcessor.setMaxAllowedMessageSize(maxAllowedIncomingMessageSize); + m_dataProcessor->setMaxAllowedMessageSize(maxAllowedIncomingMessageSize); } /*! @@ -1355,7 +1354,7 @@ void QWebSocketPrivate::setMaxAllowedIncomingMessageSize(quint64 maxAllowedIncom */ quint64 QWebSocketPrivate::maxAllowedIncomingMessageSize() const { - return m_dataProcessor.maxAllowedMessageSize(); + return m_dataProcessor->maxAllowedMessageSize(); } /*! |