From f6a6c002a6b549b77894caee46abb97b89268729 Mon Sep 17 00:00:00 2001 From: Lincoln Ramsay Date: Mon, 28 May 2012 12:04:34 +1000 Subject: Check for Q_GLOBAL_STATIC returning 0 (QtSensors). It's probably not very likely but during app shutdown, the Q_GLOBAL_STATIC used in sensors will start returning 0. Check for this to avoid the chance of a crash. Change-Id: If2c235b158c36339e35e40074a5b33dbe21a7726 Reviewed-by: Lorn Potter Reviewed-by: Zsolt Simon --- src/sensors/qsensormanager.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'src') diff --git a/src/sensors/qsensormanager.cpp b/src/sensors/qsensormanager.cpp index 92c49009..83671620 100644 --- a/src/sensors/qsensormanager.cpp +++ b/src/sensors/qsensormanager.cpp @@ -172,6 +172,8 @@ static void initPlugin(QObject *o) if (!o) return; QSensorManagerPrivate *d = sensorManagerPrivate(); + if (!d) return; // hardly likely but just in case... + if (d->seenPlugins.contains(o)) return; @@ -242,6 +244,7 @@ void QSensorManager::registerBackend(const QByteArray &type, const QByteArray &i Q_ASSERT(identifier.count()); Q_ASSERT(factory); QSensorManagerPrivate *d = sensorManagerPrivate(); + if (!d) return; // hardly likely but just in case... if (!d->backendsByType.contains(type)) { (void)d->backendsByType[type]; d->firstIdentifierForType[type] = identifier; @@ -272,6 +275,7 @@ void QSensorManager::registerBackend(const QByteArray &type, const QByteArray &i void QSensorManager::unregisterBackend(const QByteArray &type, const QByteArray &identifier) { QSensorManagerPrivate *d = sensorManagerPrivate(); + if (!d) return; // hardly likely but just in case... if (!d->backendsByType.contains(type)) { qWarning() << "No backends of type" << type << "are registered"; return; @@ -316,6 +320,7 @@ QSensorBackend *QSensorManager::createBackend(QSensor *sensor) Q_ASSERT(sensor); QSensorManagerPrivate *d = sensorManagerPrivate(); + if (!d) return 0; // hardly likely but just in case... d->loadPlugins(); SENSORLOG() << "QSensorManager::createBackend" << "type" << sensor->type() << "identifier" << sensor->identifier(); @@ -376,6 +381,7 @@ QSensorBackend *QSensorManager::createBackend(QSensor *sensor) bool QSensorManager::isBackendRegistered(const QByteArray &type, const QByteArray &identifier) { QSensorManagerPrivate *d = sensorManagerPrivate(); + if (!d) return false; // hardly likely but just in case... d->loadPlugins(); if (!d->backendsByType.contains(type)) @@ -394,6 +400,7 @@ bool QSensorManager::isBackendRegistered(const QByteArray &type, const QByteArra void QSensorManager::setDefaultBackend(const QByteArray &type, const QByteArray &identifier) { QSensorManagerPrivate *d = sensorManagerPrivate(); + if (!d) return; // hardly likely but just in case... d->defaultIdentifierForType.insert(type, identifier); } @@ -406,6 +413,7 @@ void QSensorManager::setDefaultBackend(const QByteArray &type, const QByteArray QList QSensor::sensorTypes() { QSensorManagerPrivate *d = sensorManagerPrivate(); + if (!d) return QList(); // hardly likely but just in case... d->loadPlugins(); return d->backendsByType.keys(); @@ -418,6 +426,7 @@ QList QSensor::sensorTypes() QList QSensor::sensorsForType(const QByteArray &type) { QSensorManagerPrivate *d = sensorManagerPrivate(); + if (!d) return QList(); // hardly likely but just in case... d->loadPlugins(); // no sensors of that type exist @@ -443,6 +452,7 @@ QList QSensor::sensorsForType(const QByteArray &type) QByteArray QSensor::defaultSensorForType(const QByteArray &type) { QSensorManagerPrivate *d = sensorManagerPrivate(); + if (!d) return QByteArray(); // hardly likely but just in case... d->loadPlugins(); // no sensors of that type exist @@ -466,6 +476,7 @@ QByteArray QSensor::defaultSensorForType(const QByteArray &type) void QSensor::registerInstance() { QSensorManagerPrivate *d = sensorManagerPrivate(); + if (!d) return; // hardly likely but just in case... connect(d, SIGNAL(availableSensorsChanged()), this, SIGNAL(availableSensorsChanged())); } -- cgit v1.2.3