<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">---------- Forwarded message ----------<br>From: David Faure <<a href="mailto:faure@kde.org">faure@kde.org</a>><br>
To: <a href="mailto:nepomuk@kde.org">nepomuk@kde.org</a><br>Cc: <a href="mailto:kde-pim@kde.org">kde-pim@kde.org</a><br>Date: Fri, 6 Jul 2012 12:44:30 +0000<br>Subject: [Kde-pim] nepomukqueryservice crash<br>I found the reason for the kmail composer window being disabled forever, in<br>

some cases.<br>
<br>
2) the crash itself should be fixed ;)<br>
<br>
A valgrind log of `nepomukservicestub nepomukqueryservice` gives this:<br>
<br>
"/d/kde/inst/kde4.9/bin/nepomukservicestub(19732)" Soprano: "Failed to write to fd -1 (Bad file descriptor)"<br>
"/d/kde/inst/kde4.9/bin/nepomukservicestub(19732)" Soprano: "Failed to write unsigned int32."<br>
"/d/kde/inst/kde4.9/bin/nepomukservicestub(19732)" Soprano: "Timeout (5)": "Command timed out."<br>
==19732== Thread 3:<br>
==19732== Invalid read of size 8<br>
==19732==    at 0xC5AB6DA: QPointer<Soprano::Client::ClientConnection>::operator->() const (qpointer.h:74)<br>
==19732==    by 0xC5AA70A: Soprano::Client::ClientModel::executeQuery(QString const&, Soprano::Query::QueryLanguage, QString const&) const (clientmodel.cpp:106)<br>
==19732==    by 0x68E9319: Nepomuk2::MainModel::executeQuery(QString const&, Soprano::Query::QueryLanguage, QString const&) const (nepomukmainmodel.cpp:182)<br>
==19732==    by 0x12BDDEED: Nepomuk2::Query::SearchRunnable::run() (searchrunnable.cpp:89)<br>
==19732==    by 0x4ECA2FC: QThreadPoolThread::run() (qthreadpool.cpp:107)<br>
==19732==    by 0x4EDAF27: QThreadPrivate::start(void*) (qthread_unix.cpp:307)<br>
==19732==    by 0x53CCF04: start_thread (in /lib64/<a href="http://libpthread-2.14.1.so" target="_blank">libpthread-2.14.1.so</a>)<br>
==19732==    by 0x86CD10C: clone (in /lib64/<a href="http://libc-2.14.1.so" target="_blank">libc-2.14.1.so</a>)<br>
==19732==  Address 0x117af938 is 72 bytes inside a block of size 80 free'd<br>
==19732==    at 0x4C28706: operator delete(void*) (vg_replace_malloc.c:457)<br>
==19732==    by 0xC5AA2ED: Soprano::Client::ClientModel::~ClientModel() (clientmodel.cpp:58)<br>
==19732==    by 0x68E8BAB: (anonymous namespace)::GlobalModelContainer::init(bool) (nepomukmainmodel.cpp:82)<br>
==19732==    by 0x68E8E58: (anonymous namespace)::GlobalModelContainer::model() (nepomukmainmodel.cpp:100)<br>
==19732==    by 0x68E932D: Nepomuk2::MainModel::executeQuery(QString const&, Soprano::Query::QueryLanguage, QString const&) const (nepomukmainmodel.cpp:183)<br>
==19732==    by 0x12BDDEED: Nepomuk2::Query::SearchRunnable::run() (searchrunnable.cpp:89)<br>
==19732==    by 0x4ECA2FC: QThreadPoolThread::run() (qthreadpool.cpp:107)<br>
==19732==    by 0x4EDAF27: QThreadPrivate::start(void*) (qthread_unix.cpp:307)<br>
==19732==    by 0x53CCF04: start_thread (in /lib64/<a href="http://libpthread-2.14.1.so" target="_blank">libpthread-2.14.1.so</a>)<br>
==19732==    by 0x86CD10C: clone (in /lib64/<a href="http://libc-2.14.1.so" target="_blank">libc-2.14.1.so</a>)<br>
==19732==<br>
<br>
Obviously the "delete localSocketModel" in nepomukmainmodel.cpp:82 is the problem,<br>
I assume because it's used in another thread at the same time.<br>
Or maybe the underlying soprano connection is used later on in the same thread; valgrind isn't really clear.<br>
<br>
The -1 file descriptor is weird too, does anyone know the reason for that?<br></blockquote><div><br>I'm not sure about the '-1'.<br><br>I don't think it's a threading problem cause m_initMutex is locked before deleting it, and before accessing it. So two threads cannot be accessing it at the same time. Then again, you understand threading a lot better than I do.<br>
<br><br>@Sebastian: Could you please take a look?<br><br><br clear="all"></div></div><br>-- <br><span style="color:rgb(192,192,192)">Vishesh Handa</span><br><br>