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

List:       kde-commits
Subject:    KDE/kdelibs/dnssd
From:       Jakub Stachowski <qbast () go2 ! pl>
Date:       2010-02-14 13:39:53
Message-ID: 1266154793.088598.10966.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 1090024 by qbast:

Fixes small corner case where service got removed before it could be resolved.
In this case serviceRemoved should not be emitted.



 M  +14 -7     avahi-servicebrowser.cpp  
 M  +2 -2      avahi-servicebrowser_p.h  
 M  +13 -7     mdnsd-servicebrowser.cpp  
 M  +2 -2      mdnsd-servicebrowser_p.h  


--- trunk/KDE/kdelibs/dnssd/avahi-servicebrowser.cpp #1090023:1090024
@@ -101,11 +101,10 @@
 	}
 }
 
-RemoteService::Ptr ServiceBrowserPrivate::find(RemoteService::Ptr s) const
+RemoteService::Ptr ServiceBrowserPrivate::find(RemoteService::Ptr s, const \
QList<RemoteService::Ptr>& where) const  {
-    Q_FOREACH (const RemoteService::Ptr& i, m_services) if (*s==*i) return i;
-    Q_FOREACH (const RemoteService::Ptr& i, m_duringResolve) if (*s==*i) return i;
-    return s;
+    Q_FOREACH (const RemoteService::Ptr& i, where) if (*s==*i) return i;
+    return RemoteService::Ptr();
 }
 
 void ServiceBrowserPrivate::gotNewService(int,int,const QString& name, const \
QString& type, const QString& domain, uint) @@ -125,9 +124,17 @@
 void ServiceBrowserPrivate::gotRemoveService(int,int,const QString& name, const \
QString& type, const QString& domain, uint)  {
 	m_timer.start(TIMEOUT_LAST_SERVICE);
-	RemoteService::Ptr svr=find(RemoteService::Ptr(new RemoteService(name, \
                type,domain)));
-	emit m_parent->serviceRemoved(svr);
-	m_services.removeAll(svr);
+	RemoteService::Ptr tmpl(new RemoteService(name, type,domain));
+	RemoteService::Ptr found=find(tmpl, m_duringResolve);
+	if (!found.isNull()) {
+	    m_duringResolve.removeAll(found);
+	    return;
+	}
+	found=find(tmpl, m_services);
+	if (found.isNull()) return;
+	
+	emit m_parent->serviceRemoved(found);
+	m_services.removeAll(found);
 }
 void ServiceBrowserPrivate::browserFinished()
 {
--- trunk/KDE/kdelibs/dnssd/avahi-servicebrowser_p.h #1090023:1090024
@@ -50,8 +50,8 @@
 	org::freedesktop::Avahi::ServiceBrowser* m_browser;
 	ServiceBrowser* m_parent;
 	
-	// get already found service identical to s or just return s if not found
-	RemoteService::Ptr find(RemoteService::Ptr s) const;
+	// get already found service identical to s or null if not found
+	RemoteService::Ptr find(RemoteService::Ptr s, const QList<RemoteService::Ptr>& \
where) const;  
 private Q_SLOTS:
 	void browserFinished();
--- trunk/KDE/kdelibs/dnssd/mdnsd-servicebrowser.cpp #1090023:1090024
@@ -117,11 +117,10 @@
 void ServiceBrowser::virtual_hook(int, void*)
 {}
 
-RemoteService::Ptr ServiceBrowserPrivate::find(RemoteService::Ptr s) const
+RemoteService::Ptr ServiceBrowserPrivate::find(RemoteService::Ptr s, const \
QList<RemoteService::Ptr>& where) const  {
-    Q_FOREACH (const RemoteService::Ptr& i, m_services) if (*s==*i) return i;
-    Q_FOREACH (const RemoteService::Ptr& i, m_duringResolve) if (*s==*i) return i;
-    return s;
+    Q_FOREACH (const RemoteService::Ptr& i, where) if (*s==*i) return i;
+    return RemoteService::Ptr();
 }
 
 
@@ -147,9 +146,16 @@
 		    }
 		}
 		else {
-		    svr=find(svr);
-		    emit m_parent->serviceRemoved(svr);
-		    m_services.removeAll(svr);
+
+                	RemoteService::Ptr found=find(svr, m_duringResolve);
+                	if (!found.isNull()) m_duringResolve.removeAll(found);
+                	else {
+                        	found=find(svr, m_services);
+                        	if (!found.isNull()) {
+	                        	emit m_parent->serviceRemoved(found);
+                        	        m_services.removeAll(found);
+                        	}
+                	}
 		}
 		m_finished = aev->m_last;
 		if (m_finished) queryFinished();
--- trunk/KDE/kdelibs/dnssd/mdnsd-servicebrowser_p.h #1090023:1090024
@@ -46,8 +46,8 @@
 	ServiceBrowser* m_parent;
 	QTimer timeout;
 
-	// get already found service identical to s or just return s if not found
-	RemoteService::Ptr find(RemoteService::Ptr s) const;
+	// get already found service identical to s or null if not found
+	RemoteService::Ptr find(RemoteService::Ptr s, const QList<RemoteService::Ptr>& \
where) const;  virtual void customEvent(QEvent* event);
 public Q_SLOTS:
 	void queryFinished();


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

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