From d97b13fc2ccd38dd6d38190722d2207bb26315b5 Mon Sep 17 00:00:00 2001 From: Jyrki Yli-Nokari Date: Fri, 13 Mar 2020 13:53:01 +0200 Subject: serialnmea plugin construction connect() error fix serialnmea QIOPipePrivate initialization accessed QIOPipe via q_ptr before the object was constructed. [ChangeLog][QtPositioning][serialnmea plugin] Fixed serialnmea plugin initialization when used with serial port. Fixes: QTBUG-82819 Change-Id: I3ff2de381a124f6b25f19327a39f1b001ef4899a Reviewed-by: Paolo Angelelli --- src/plugins/position/serialnmea/qiopipe.cpp | 15 ++++++++++----- src/plugins/position/serialnmea/qiopipe_p.h | 1 + 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/plugins/position/serialnmea/qiopipe.cpp b/src/plugins/position/serialnmea/qiopipe.cpp index ce908d4d..fab0b56b 100644 --- a/src/plugins/position/serialnmea/qiopipe.cpp +++ b/src/plugins/position/serialnmea/qiopipe.cpp @@ -50,7 +50,15 @@ QT_BEGIN_NAMESPACE QIOPipePrivate::QIOPipePrivate(QIODevice *iodevice, bool proxying) : m_proxying(proxying), source(iodevice) { - const QIOPipe *parentPipe = qobject_cast(iodevice); +} + +QIOPipePrivate::~QIOPipePrivate() +{ +} + +void QIOPipePrivate::initialize() +{ + const QIOPipe *parentPipe = qobject_cast(source); if (parentPipe && parentPipe->d_func()->m_proxying) // with proxying parent, return; // don't do anything @@ -60,10 +68,6 @@ QIOPipePrivate::QIOPipePrivate(QIODevice *iodevice, bool proxying) QObjectPrivate::connect(source, &QIODevice::readyRead, this, &QIOPipePrivate::_q_onReadyRead); } -QIOPipePrivate::~QIOPipePrivate() -{ -} - bool QIOPipePrivate::readAvailableData() { if (!source) return false; @@ -130,6 +134,7 @@ void QIOPipePrivate::removeChildPipe(QIOPipe *childPipe) QIOPipe::QIOPipe(QIODevice *parent, Mode mode) : QIODevice(*new QIOPipePrivate(parent, mode == ProxyPipe), parent) { + this->d_func()->initialize(); if (!parent->isOpen() && !parent->open(QIODevice::ReadOnly)) { qWarning() << "QIOPipe: Failed to open " << parent; return; diff --git a/src/plugins/position/serialnmea/qiopipe_p.h b/src/plugins/position/serialnmea/qiopipe_p.h index 25758fcb..472ab102 100644 --- a/src/plugins/position/serialnmea/qiopipe_p.h +++ b/src/plugins/position/serialnmea/qiopipe_p.h @@ -95,6 +95,7 @@ public: explicit QIOPipePrivate(QIODevice *iodevice, bool proxying); ~QIOPipePrivate() override; + void initialize(); bool readAvailableData(); void pumpData(const QByteArray &ba); void pushData(const QByteArray &ba); -- cgit v1.2.1