summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJyrki Yli-Nokari <jyrki.yli-nokari@valmet.com>2020-03-13 13:53:01 +0200
committerJyrki Yli-Nokari <jyrkiylinokari@gmail.com>2020-03-23 00:57:55 +0200
commitd97b13fc2ccd38dd6d38190722d2207bb26315b5 (patch)
treef853f00a9e134707a390e10cdcef570a751a360d
parenta9b976944740ba3fd8988e117cd101e48a2aef50 (diff)
downloadqtlocation-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.cpp15
-rw-r--r--src/plugins/position/serialnmea/qiopipe_p.h1
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);