summaryrefslogtreecommitdiffstats
path: root/src/plugins/sensors/sensorfw/sensorfwtapsensor.cpp
diff options
context:
space:
mode:
authorLorn Potter <lorn.potter@jollamobile.com>2014-07-07 16:58:22 +1000
committerLorn Potter <lorn.potter@jollamobile.com>2014-07-10 21:58:02 +0200
commit9f377d1fa286817a17a5e5de3786a2d73aeaa822 (patch)
treeaecefd0f3e6e9f8b74420af1e0ce558ef47fb8f0 /src/plugins/sensors/sensorfw/sensorfwtapsensor.cpp
parent044486f8b41b9ae7bdfad838be79ec5b2782fed5 (diff)
Series of crash fixes from Mer, squashed
1)tracing plugin loading 2)m_remoteSensorManager can be nullptr But it seems it does not solve incorrect initialization in the case manager interface is nullptr: init() for different sensors does not check initDone 3)split initSensor() to template function and function most of initSensor() does not depend on template param, so it is better to split it -> less code should be generated 4)do not use sensor manager if it is invalid 5)correct class members initialization order 6)assert sensor interface is not null From what I saw according to logic it should not happen so using Q_ASSERT for better maintainability 7)check local interface pointer in SensorfwTapSensor::start() Signed-off-by: Denis Zalevskiy <denis.zalevskiy@jolla.com> Change-Id: I5c1bf3999ad2268c0dba9b3fe511d999c2e63fd9 Reviewed-by: Alex Blasche <alexander.blasche@digia.com>
Diffstat (limited to 'src/plugins/sensors/sensorfw/sensorfwtapsensor.cpp')
-rw-r--r--src/plugins/sensors/sensorfw/sensorfwtapsensor.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/plugins/sensors/sensorfw/sensorfwtapsensor.cpp b/src/plugins/sensors/sensorfw/sensorfwtapsensor.cpp
index e6f61d9b..01ee7789 100644
--- a/src/plugins/sensors/sensorfw/sensorfwtapsensor.cpp
+++ b/src/plugins/sensors/sensorfw/sensorfwtapsensor.cpp
@@ -45,8 +45,8 @@ char const * const SensorfwTapSensor::id("sensorfw.tapsensor");
SensorfwTapSensor::SensorfwTapSensor(QSensor *sensor)
: SensorfwSensorBase(sensor),
+ m_initDone(false),
m_isOnceStarted(false)
- , m_initDone(false)
{
init();
setReading<QTapReading>(&m_reading);
@@ -71,9 +71,14 @@ void SensorfwTapSensor::start()
}
else m_isDoubleTapSensor = b;
- if (!m_isOnceStarted || (m_isOnceStarted && isDoubleTapSensor != m_isDoubleTapSensor))
- ((TapSensorChannelInterface*)m_sensorInterface)->
- setTapType(m_isDoubleTapSensor?TapSensorChannelInterface::Double:TapSensorChannelInterface::Single);
+ if (!m_isOnceStarted || (m_isOnceStarted && isDoubleTapSensor != m_isDoubleTapSensor)) {
+ TapSensorChannelInterface *iface = static_cast<TapSensorChannelInterface *>(m_sensorInterface);
+ if (!iface) {
+ qWarning() << "Sensor interface is not initialized";
+ return;
+ }
+ iface->setTapType(m_isDoubleTapSensor?TapSensorChannelInterface::Double:TapSensorChannelInterface::Single);
+ }
SensorfwSensorBase::start();
// Set tap type (single/double)
@@ -106,6 +111,7 @@ void SensorfwTapSensor::slotDataAvailable(const Tap& data)
bool SensorfwTapSensor::doConnect()
{
+ Q_ASSERT(m_sensorInterface);
return QObject::connect(m_sensorInterface, SIGNAL(dataAvailable(Tap)),
this, SLOT(slotDataAvailable(Tap)));
}