[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    kdereview/bluedevil/src/daemon/kded
From:       Eduardo Robles Elvira <edulix () gmail ! com>
Date:       2010-05-14 14:40:25
Message-ID: 20100514144025.D4925AC8B5 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1126653 by edulix:

fixing crash when resuming the computer



 M  +16 -4     BlueDevilDaemon.cpp  


--- trunk/kdereview/bluedevil/src/daemon/kded/BlueDevilDaemon.cpp #1126652:1126653
@@ -39,6 +39,7 @@
     //Do not delete this :)
     Solid::Control::BluetoothManager* man;
     AgentListener *agentListener;
+    AgentListener *oldAgentListener;
     Solid::Control::BluetoothInterface* adapter;
     org::kde::BlueDevil::Service* service;
     QString m_defaultAdapterName;
@@ -48,6 +49,7 @@
     : KDEDModule(parent), d(new Private)
 {
     d->agentListener = 0;
+    d->oldAgentListener = 0;
     d->adapter = 0;
     d->service = 0;
 
@@ -112,6 +114,7 @@
     
     QString interface;
     if (!d->man->defaultInterface().isEmpty()) {
+        kDebug() << "using default interface";
         interface = d->man->defaultInterface();
     } else if (!d->man->bluetoothInterfaces().isEmpty() &&
         !d->man->bluetoothInterfaces().first().ubi().isEmpty()) {
@@ -145,8 +148,8 @@
 
     connect(d->agentListener,SIGNAL(finished()),this,SLOT(agentThreadStopped()));
     d->agentListener->quit();
+    d->oldAgentListener = d->agentListener;
 
-    kDebug() << "You've got no bluetooth interfaces attached!";
     d->status = Private::Offline;
 
     if (!serviceStarted()) {
@@ -169,8 +172,13 @@
 
 void BlueDevilDaemon::agentThreadStopped()
 {
-    d->agentListener->deleteLater();
+    d->oldAgentListener->deleteLater();
+    if (d->agentListener == d->oldAgentListener) {
     d->agentListener = 0;
+    } else {
+        kDebug() <<  "Not removing the new agent listener, only the old one";
+    }
+    d->oldAgentListener = 0;
 
     kDebug() << "agent listener deleted";
 }
@@ -195,12 +203,16 @@
 
 void BlueDevilDaemon::defaultAdapterChanged(const QString& adapterName)
 {
-    kDebug() << adapterName;
+    kDebug() << adapterName << d->status;
     //This should do the trick :)
-    if (d->m_defaultAdapterName == adapterName && d->status == Private::Online) {
+    if (d->m_defaultAdapterName == adapterName) {
       kDebug() << "already online with that adapter";
       return;
     }
+
+    if (d->status == Private::Online) {
+        kDebug() << "We are online, getting offline first";
     offlineMode();
+    }
     onlineMode();
 }

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic