> 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
> 
>

Reply via email to