> On Aug. 14, 2011, 11:02 p.m., Albert Astals Cid wrote: > > When using your code with my simple test program > > > > #include "hostinfo_p.h" > > #include <QApplication> > > #include <QHostInfo> > > #include <QTime> > > > > int main(int a, char **b) > > { > > QApplication app(a, b); > > QTime t; > > t.start(); > > qDebug() << KIO::HostInfo::lookupHost("www.google.com", > > 1).addresses(); > > qDebug() << t.elapsed(); > > } > > > > I get > > > > a.out(4386) KIO::HostInfo::lookupHost: Waiting one second for name lookup > > thread to start > > a.out(4386) KIO::HostInfo::lookupHost: Waiting one second for name lookup > > thread to start > > a.out(4386) KIO::HostInfo::lookupHost: Waiting one second for name lookup > > thread to start > > a.out(4386) KIO::HostInfo::lookupHost: Waiting one second for name lookup > > thread to start > > a.out(4386) KIO::HostInfo::lookupHost: Waiting one second for name lookup > > thread to start > > a.out(4386) KIO::HostInfo::lookupHost: Failed to start name lookup thread > > for "www.google.com" > > () > > 55 > > kDebugStream called after destruction (from virtual > > KIO::NameLookUpThread::~NameLookUpThread() file > > kdelibs/kio/kio/hostinfo.cpp line 125) > > still running ? false > > > > The kDebugStream line looks ugly and the waiting one second for name lookup > > are wrong too since what actually has happened is that the thread already > > finished so the name lookup worked > > > > I am also concerned about you accessing the cache from the main thread and > > from the helper thread without a lock (it could cause a crash i think)
> kDebugStream called after destruction (from virtual > KIO::NameLookUpThread::~NameLookUpThread() file kdelibs/kio/kio/hostinfo.cpp > line 125) > still running ? false That is there only for debugging session and was not meant to be left around. > The kDebugStream line looks ugly and the waiting one second for name lookup > are wrong too since what actually has happened is that the thread > already finished so the name lookup worked. Actually the reason you encountered the error aboveis because I accidentally left the "m_started = false" at the end of the NameLookUpThread::run class. As such the fix is very easy. Remove that line. It was left in by mistake when I was experimenting with things. The same goes for the debug statements. They are there for the testing purposes only and can be easily commented out. > I am also concerned about you accessing the cache from the main thread and > from the helper thread without a lock (it could cause a crash i think) huh ? The helper thread is waited upon to complete its job before any code in the main thread accesses the case ; so I fail to see how this can possibly result in what you are stating here. - Dawit ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: http://git.reviewboard.kde.org/r/102238/#review5696 ----------------------------------------------------------- On Aug. 12, 2011, 3:45 a.m., Dawit Alemayehu wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > http://git.reviewboard.kde.org/r/102238/ > ----------------------------------------------------------- > > (Updated Aug. 12, 2011, 3:45 a.m.) > > > Review request for kdelibs. > > > Summary > ------- > > The attached patch is an alternate approach to address the issue of crashes > that arise from terminating an active thread than the one proposed at > https://git.reviewboard.kde.org/r/102179/. With this patch the function > "QHostInfo::lookupHost(QString, int)" avoids the use of QThread::terminate > with the following fairly simple changes: > > - Connect its finished signal to its parent deleteLater slot in the ctor so > that the thread is automatically deleted later. > - Store the looked up DNS info in the global cache to avoid unnecessary > queries for the same request. > - Check for cached DNS information and avoid doing reverse look ups before > resorting to performing DNS queries in a separate thread. > > > Diffs > ----- > > kio/kio/hostinfo.cpp 344b1d8 > > Diff: http://git.reviewboard.kde.org/r/102238/diff > > > Testing > ------- > > Local unit testing code. Tested both failing and working DNS lookup scenarios. > > > Thanks, > > Dawit > >