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

List:       kde-commits
Subject:    kdelibs/kdecore/network
From:       Thiago Macieira <thiago () kde ! org>
Date:       2005-03-18 3:24:10
Message-ID: 20050318032410.1CBCF16DE8 () office ! kde ! org
[Download RAW message or body]

CVS commit by thiago: 

Fix the bug that made the IPv6 blacklist not work where it was most
wanted: in kioslaves. They don't have a kapp pointer...

To be backported.
CCBUG:100777


  M +18 -5     kresolverstandardworkers.cpp   1.18


--- kdelibs/kdecore/network/kresolverstandardworkers.cpp  #1.17:1.18
@@ -77,8 +77,21 @@ static bool hasIPv6()
 
 // blacklist management
+static QMutex blacklistMutex;   // KDE4: change to a QReadWriteLock
 QStringList KBlacklistWorker::blacklist;
 
 void KBlacklistWorker::init()
 {
+  // HACK!
+  // FIXME KDE4: How do I detect there is an instance, without triggering
+  // its creation or an assertion fault?
+  if (!KGlobal::_instance)
+    return;
+
+  static bool beenhere = false;
+
+  if (beenhere)
+    return;
+
+  beenhere = true;
   loadBlacklist();
 }
@@ -86,7 +99,5 @@ void KBlacklistWorker::init()
 void KBlacklistWorker::loadBlacklist()
 {
-  if (!kapp)
-    return;
-
+  QMutexLocker locker(&blacklistMutex);
   QStringList filelist = KGlobal::dirs()->findAllResources("config", "ipv6blacklist");
 
@@ -123,4 +134,6 @@ void KBlacklistWorker::loadBlacklist()
 bool KBlacklistWorker::isBlacklisted(const QString& host)
 {
+  KBlacklistWorker::init();
+
   // empty hostnames cannot be blacklisted
   if (host.isEmpty())
@@ -130,4 +143,6 @@ bool KBlacklistWorker::isBlacklisted(con
   QString ascii = QString::fromLatin1(KResolver::domainToAscii(host));
 
+  QMutexLocker locker(&blacklistMutex);
+
   // now find out if this hostname is present
   QStringList::ConstIterator it = blacklist.constBegin(),
@@ -1005,6 +1020,4 @@ bool KGetAddrinfoWorker::wantThis(int fa
 void KNetwork::Internal::initStandardWorkers()
 {
-  KBlacklistWorker::init();
-
   //KResolverWorkerFactoryBase::registerNewWorker(new KResolverWorkerFactory<KBlacklistWorker>);
   KResolverWorkerFactoryBase::registerNewWorker(new KResolverWorkerFactory<KStandardWorker>);


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

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