diff options
author | Jyrki Yli-Nokari <jyrki.yli-nokari@valmet.com> | 2020-03-13 13:53:01 +0200 |
---|---|---|
committer | Jyrki Yli-Nokari <jyrkiylinokari@gmail.com> | 2020-03-23 00:57:55 +0200 |
commit | d97b13fc2ccd38dd6d38190722d2207bb26315b5 (patch) | |
tree | f853f00a9e134707a390e10cdcef570a751a360d | |
parent | a9b976944740ba3fd8988e117cd101e48a2aef50 (diff) | |
download | qtlocation-d97b13fc2ccd38dd6d38190722d2207bb26315b5.tar.gz |
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 <paolo.angelelli.qt@gmail.com>
-rw-r--r-- | src/plugins/position/serialnmea/qiopipe.cpp | 15 | ||||
-rw-r--r-- | 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<QIOPipe *>(iodevice); +} + +QIOPipePrivate::~QIOPipePrivate() +{ +} + +void QIOPipePrivate::initialize() +{ + const QIOPipe *parentPipe = qobject_cast<QIOPipe *>(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); |