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

List:       kde-commits
Subject:    [Konversation] 58d4f73: Okay,
From:       John Tapsell <john.tapsell () kdemail ! net>
Date:       2010-07-01 13:28:03
Message-ID: 20100701132803.447FFBB5753 () projects ! kde ! org
[Download RAW message or body]

commit 58d4f731787c23798cbce0420cd9e2fc435633b2
Author: John Tapsell <john.tapsell@kdemail.net>
Date:   Fri Aug 20 13:07:28 2004 +0000

    Okay, here's the deal.
    ASYNC look ups with KExtendedLookup are broke. See   \
http://bugs.kde.org/show_bug.cgi?id=50279  The code before used to have a \
resolver class.  This runs in a seperate thread, and does a lookup.  \
However, the serverSocket isn't thread safe, and now both the Server and \
IRCResolver are using  the serverSocket in seperate threads.  This means \
you could call the resolver to do a lookup, but  then modify the \
serverSocket in the server class, then when the resolver does the lookup, \
it is using  the modified version.  Not to mention problems with the server \
and ircresolver modifying serversocket  at the same instant.
    For now, I'm disabling the resolver code until either kde4 when \
hopefully async lookups are done, or until  someone moves all the \
serversocket code into a seperate thread, so only one thread ever modifies \
or uses  the serversocket.
    
    svn path=/trunk/kdeextragear-2/konversation/; revision=339264

diff --git a/konversation/server.cpp b/konversation/server.cpp
index 87d22a1..f9c2ccc 100644
--- a/konversation/server.cpp
+++ b/konversation/server.cpp
@@ -471,9 +471,25 @@ void Server::connectToIRCServer()
 
     // (re)connect. Autojoin will be done by the input filter
     statusView->appendServerMessage(i18n("Info"),i18n("Looking for server \
%1:%2...").arg(serverSocket.host()).arg(serverSocket.port())); +
+    
+    // Okay, here's the deal.
+    // ASYNC look ups with KExtendedLookup are broke. See   \
http://bugs.kde.org/show_bug.cgi?id=50279 +    // The code before used to \
have a resolver class.  This runs in a seperate thread, and does a lookup. \
+    // However, the serverSocket isn't thread safe, and now both the \
Server and IRCResolver are using +    // the serverSocket in seperate \
threads.  This means you could call the resolver to do a lookup, but +    \
// then modify the serverSocket in the server class, then when the resolver \
does the lookup, it is using +    // the modified version.  Not to mention \
problems with the server and ircresolver modifying serversocket +    // at \
the same instant. +    // For now, I'm disabling the resolver code until \
either kde4 when hopefully async lookups are done, or until +    // someone \
moves all the serversocket code into a seperate thread, so only one thread \
ever modifies or uses +    // the serversocket.
+    serverSocket.lookup(); //sync lookup
+    lookupFinished();      //call this manually. with async code below, an \
event is called from resolver which is captured and runs lookupFinished() +
     // QDns is broken, so don't use async lookup, use own threaded class \
                instead
-    resolver.setSocket(&serverSocket);
-    resolver.start();
+    //resolver.setSocket(&serverSocket);
+    //resolver.start();
   }
 }
 
@@ -566,7 +582,11 @@ bool Server::eventFilter(QObject* parent,QEvent* \
event)  }
   return QObject::eventFilter(parent,event);
 }
-
+/** Called when the remote servers IP has been found.
+ * connectToIRCServer does a lookup on the server name.
+ * In async mode, lookups are done via the ircresolver class, which is a \
thread.  This does a blocking serverSocket->lookup + * which send a \
QEvent::User when done, which inputfilter picks up, and calls this. + */
 void Server::lookupFinished()
 {
   // error during lookup
@@ -1292,6 +1312,7 @@ QString Server::getIp()
     QString ip(KInetSocketAddress::addrToString(inetSocket.family(),&in_addr));
  // remove temporary object - only in deprecated way
     //delete ipAddr;
+    kdDebug() << "in getIp(), serverSocket.localAddress() returns " << ip \
<< endl;  return ip;
   }
   kdDebug() << "in getIp(), serverSocket.localAddress() is returning NULL" \
<<endl;


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

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