OnlinePollerThread now works as intended
[irwi] / src / onlinepollerthread.cpp
index 6e1cdac..4dd8d75 100644 (file)
@@ -3,31 +3,52 @@
 #include <QDBusMessage>
 #include <QDBusConnection>
 
+OnlinePollerThread::OnlinePollerThread()
+    : m_exiting(false)
+{
+}
+
+OnlinePollerThread::~OnlinePollerThread()
+{
+    m_exiting = true;
+    stop();
+    quit();
+    wait();
+}
+
 void OnlinePollerThread::run()
 {
-    running = true;
+    m_running = true;
     QTM_PREPEND_NAMESPACE(QNetworkConfigurationManager) qncm;
-    if (!qncm.isOnline()) {
+    bool connected = qncm.isOnline();
+    if (!connected) {
         QDBusMessage m = QDBusMessage::createMethodCall(
                 "com.nokia.icd_ui", "/com/nokia/icd_ui", 
                 "com.nokia.icd_ui", "show_conn_dlg");
         m << false;
         QDBusConnection::systemBus().send(m);
-        while(running)
+        while(m_running)
         {
-            if (!qncm.isOnline()) {
-                msleep(250);
+            connected = qncm.isOnline();
+            if (connected) {
+                m_running = false;
             } else {
-                emit online();
-                break;
+                msleep(250);
             }
         }
     }
-    exec();
+
+    if (connected) {
+        emit online();
+    }
+
+    if (!m_exiting) {
+        exec();
+    }
 }
 
 void OnlinePollerThread::stop()
 {
-    running = false;
+    m_running = false;
 }