[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