[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