summaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
authorAaron McCarthy <aaron.mccarthy@nokia.com>2012-06-06 13:27:54 +1000
committerQt by Nokia <qt-info@nokia.com>2012-06-07 01:51:12 +0200
commit702a9d73fa145fd107c8a3f03d68d93b6968af77 (patch)
tree649755fced15b82982be02715271ed7e5d6e6d7f /src/plugins
parentacdf73a1c2585cb5009e1218f13830c60e1250f5 (diff)
downloadqtlocation-702a9d73fa145fd107c8a3f03d68d93b6968af77.tar.gz
Fix crash in simulator when connection fails.
Remove the qFatal() and return a null pointer from the factory instead. Change-Id: Icbc263092cb7e3ce824602e656cc1243b359249b Reviewed-by: Alex Wilson <alex.wilson@nokia.com>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/position/simulator/qgeopositioninfosourcefactory_simulator.cpp7
-rw-r--r--src/plugins/position/simulator/qgeosatelliteinfosource_simulator.cpp5
-rw-r--r--src/plugins/position/simulator/qgeosatelliteinfosource_simulator_p.h2
-rw-r--r--src/plugins/position/simulator/qlocationconnection_simulator.cpp6
-rw-r--r--src/plugins/position/simulator/qlocationconnection_simulator_p.h3
5 files changed, 19 insertions, 4 deletions
diff --git a/src/plugins/position/simulator/qgeopositioninfosourcefactory_simulator.cpp b/src/plugins/position/simulator/qgeopositioninfosourcefactory_simulator.cpp
index 07256588..8f1b7974 100644
--- a/src/plugins/position/simulator/qgeopositioninfosourcefactory_simulator.cpp
+++ b/src/plugins/position/simulator/qgeopositioninfosourcefactory_simulator.cpp
@@ -48,5 +48,10 @@ QGeoPositionInfoSource *QGeoPositionInfoSourceFactorySimulator::positionInfoSour
QGeoSatelliteInfoSource *QGeoPositionInfoSourceFactorySimulator::satelliteInfoSource(QObject *parent)
{
- return new QGeoSatelliteInfoSourceSimulator(parent);
+ QGeoSatelliteInfoSourceSimulator *src = new QGeoSatelliteInfoSourceSimulator(parent);
+ if (!src->isConnected()) {
+ delete src;
+ src = 0;
+ }
+ return src;
}
diff --git a/src/plugins/position/simulator/qgeosatelliteinfosource_simulator.cpp b/src/plugins/position/simulator/qgeosatelliteinfosource_simulator.cpp
index 6840f55e..d822c80a 100644
--- a/src/plugins/position/simulator/qgeosatelliteinfosource_simulator.cpp
+++ b/src/plugins/position/simulator/qgeosatelliteinfosource_simulator.cpp
@@ -57,6 +57,11 @@ QGeoSatelliteInfoSourceSimulator::QGeoSatelliteInfoSourceSimulator(QObject *pare
connect(requestTimer, SIGNAL(timeout()), this, SLOT(updateData()));
}
+bool QGeoSatelliteInfoSourceSimulator::isConnected() const
+{
+ return Simulator::LocationConnection::ensureSimulatorConnection();
+}
+
void QGeoSatelliteInfoSourceSimulator::startUpdates()
{
int interval = updateInterval();
diff --git a/src/plugins/position/simulator/qgeosatelliteinfosource_simulator_p.h b/src/plugins/position/simulator/qgeosatelliteinfosource_simulator_p.h
index 0d76a375..ce12c191 100644
--- a/src/plugins/position/simulator/qgeosatelliteinfosource_simulator_p.h
+++ b/src/plugins/position/simulator/qgeosatelliteinfosource_simulator_p.h
@@ -60,6 +60,8 @@ class QGeoSatelliteInfoSourceSimulator : public QGeoSatelliteInfoSource
public:
explicit QGeoSatelliteInfoSourceSimulator(QObject *parent = 0);
+ bool isConnected() const;
+
virtual void setUpdateInterval(int msec);
virtual int minimumUpdateInterval() const;
diff --git a/src/plugins/position/simulator/qlocationconnection_simulator.cpp b/src/plugins/position/simulator/qlocationconnection_simulator.cpp
index a35419e1..4f530e41 100644
--- a/src/plugins/position/simulator/qlocationconnection_simulator.cpp
+++ b/src/plugins/position/simulator/qlocationconnection_simulator.cpp
@@ -67,7 +67,8 @@ namespace Simulator
qt_registerLocationTypes();
mWorker = mConnection->connectToServer(Connection::simulatorHostName(true), simulatorPort);
if (!mWorker)
- qFatal("Could not connect to server");
+ return;
+
mWorker->addReceiver(this);
// register for location notifications
@@ -85,9 +86,10 @@ namespace Simulator
delete mConnection;
}
- void LocationConnection::ensureSimulatorConnection()
+ bool LocationConnection::ensureSimulatorConnection()
{
static LocationConnection locationConnection;
+ return locationConnection.mWorker;
}
void LocationConnection::initialLocationDataSent()
diff --git a/src/plugins/position/simulator/qlocationconnection_simulator_p.h b/src/plugins/position/simulator/qlocationconnection_simulator_p.h
index 22cc3b63..dc0739bc 100644
--- a/src/plugins/position/simulator/qlocationconnection_simulator_p.h
+++ b/src/plugins/position/simulator/qlocationconnection_simulator_p.h
@@ -57,8 +57,9 @@ namespace Simulator
class LocationConnection : public QObject
{
Q_OBJECT
+
public:
- static void ensureSimulatorConnection();
+ static bool ensureSimulatorConnection();
virtual ~LocationConnection();
private: