diff --git a/kdevplatform/language/duchain/navigation/abstractnavigationcontext.cpp b/kdevplatform/language/duchain/navigation/abstractnavigationcontext.cpp --- a/kdevplatform/language/duchain/navigation/abstractnavigationcontext.cpp +++ b/kdevplatform/language/duchain/navigation/abstractnavigationcontext.cpp @@ -279,8 +279,10 @@ Q_D(AbstractNavigationContext); //We create a navigation-widget here, and steal its context.. evil ;) + DUChainReadLocker lock; QScopedPointer navigationWidget( declaration->context()->createNavigationWidget(declaration.data())); + lock.unlock(); if (navigationWidget) { NavigationContextPointer ret = navigationWidget->context(); ret->setPreviousContext(this); diff --git a/kdevplatform/language/duchain/navigation/abstractnavigationwidget.cpp b/kdevplatform/language/duchain/navigation/abstractnavigationwidget.cpp --- a/kdevplatform/language/duchain/navigation/abstractnavigationwidget.cpp +++ b/kdevplatform/language/duchain/navigation/abstractnavigationwidget.cpp @@ -278,8 +278,6 @@ void AbstractNavigationWidgetPrivate::anchorClicked(const QUrl& url) { - DUChainReadLocker lock; - //We may get deleted while the call to acceptLink, so make sure we don't crash in that case QPointer thisPtr(q); NavigationContextPointer nextContext = m_context->acceptLink(url.toString()); diff --git a/plugins/contextbrowser/contextbrowser.cpp b/plugins/contextbrowser/contextbrowser.cpp --- a/plugins/contextbrowser/contextbrowser.cpp +++ b/plugins/contextbrowser/contextbrowser.cpp @@ -795,14 +795,14 @@ if (m_useDeclaration.data()) { foundDeclaration = m_useDeclaration.data(); } else { + DUChainReadLocker lock; //If we haven't found a special language object, search for a use/declaration and eventually highlight it foundDeclaration = DUChainUtils::declarationForDefinition(DUChainUtils::itemUnderCursor( view->document()->url(), position).declaration); if (foundDeclaration && foundDeclaration->kind() == Declaration::Alias) { auto* alias = dynamic_cast(foundDeclaration); Q_ASSERT(alias); - DUChainReadLocker lock; foundDeclaration = alias->aliasedDeclaration().declaration(); } } @@ -1083,7 +1083,6 @@ if (decl && decl->kind() == Declaration::Alias) { auto* alias = dynamic_cast(decl); Q_ASSERT(alias); - DUChainReadLocker lock; decl = alias->aliasedDeclaration().declaration(); }