duchain seems to be broken

Andreas Pakulat apaku at gmx.de
Sun May 6 13:54:56 UTC 2007


On 06.05.07 09:16:47, dukju ahn wrote:
> 2007/5/5, Jakob Petsovits <jpetso at gmx.at>:
> > Ah right. This was the crash I asked you about (which did not happen on your
> > system at that time), approximately two weeks ago.
> >
> > It's caused by a QMutexLocker which does not lock even if it really should,
> > in lib/editor/editorintegrator.cpp:190 and the following lines:
> >
> > Range* newRange = data()->topRanges[currentUrl()][type] =
> >         createRange(currentDocument()->documentRange());
> > if (SmartInterface* iface = smart()) {
> >     QMutexLocker lock(iface->smartMutex());
> >     Q_ASSERT(newRange->isSmartRange());
> >     iface->addHighlightToDocument( newRange->toSmartRange(), false );
> >     newRange->toSmartRange()->addWatcher(data());
> > }
> >
> > The line
> >     iface->addHighlightToDocument( newRange->toSmartRange(), false );
> > crashes, because the QMutexLocker two lines above DOES NOT LOCK the mutex.
> > Check it for yourself by adding the debug lines
> >
> > bool smartLocked = true;
> > if (iface->smartMutex()->tryLock()) {
> >     iface->smartMutex()->unlock();
> >     smartLocked = false;
> > }
> >
> > directly after the QMutexLocker creation.
> > (That's the code that Katepart uses to check if the mutex is locked.)
> 
> I've found the reason of error. The reason was the kdelibs/ktexteditor
> The smartMutex is initialized with QMutex::Recursive mode. In case of
> recursive mutex, one single thread can gain a lock again and again.
> So in above code, the tryLock() can always gain a lock, and the return
> value was false.
> 
> In short, the assert code which ktexteditor used was a bug. Only after
> the mutex was initted with Non-Recursive more, or we change the
> Q_ASSERT code in kdelibs, the error cannot be solved.

I'm forwarding this to kwrite-devel as obviously there's something wrong
in katepart.

Note: I didn't check after the latest resorting in katepart, so if it
was fixed during that please ignore this mail.

Andreas

-- 
You have taken yourself too seriously.




More information about the KDevelop-devel mailing list