https://bugs.documentfoundation.org/show_bug.cgi?id=151894

Stephan Bergmann <[email protected]> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
     Ever confirmed|0                           |1
           Assignee|[email protected] |[email protected]
                   |desktop.org                 |
             Status|UNCONFIRMED                 |ASSIGNED
                 CC|                            |[email protected]

--- Comment #6 from Stephan Bergmann <[email protected]> ---
(In reply to Alex Thurgood from comment #5)
> Created attachment 183418 [details]
> Spindump of hung soffice process

The relevant part here is that a non-main thread (Thread 0x28b5b Thread name
"DocumentEventNotifier") is calling [NSSpellChecker sharedSpellChecker], but
apparently with the SolarMutex erroneously locked,

>     1001  _pthread_start + 148 (libsystem_pthread.dylib + 28780) [0x1a199a06c]
>       1001  osl_thread_start_Impl(void*) + 128 (libuno_sal.dylib.3 + 227684) 
> [0x102b53964]
>         1001  threadFunc + 28 (libcomphelper.dylib + 287916) [0x102fb24ac]
>           1001  non-virtual thunk to 
> comphelper::AsyncEventNotifierAutoJoin::run() + 36 (libcomphelper.dylib + 
> 287576) [0x102fb2358]
>             1001  comphelper::AsyncEventNotifierBase::execute() + 244 
> (libcomphelper.dylib + 283748) [0x102fb1464]
>               1001  
> dbaccess::DocumentEventNotifier_Impl::impl_notifyEvent_nothrow(com::sun::star::document::DocumentEvent
>  const&) + 168 (libdbalo.dylib + 1130412) [0x376ce3fac]
>                 1001  void 
> comphelper::OInterfaceContainerHelper3<com::sun::star::document::XDocumentEventListener>::forEach<comphelper::OInterfaceContainerHelper3<com::sun::star::document::XDocumentEventListener>::NotifySingleListener<com::sun::star::document::DocumentEvent>
>  
> >(comphelper::OInterfaceContainerHelper3<com::sun::star::document::XDocumentEventListener>::NotifySingleListener<com::sun::star::document::DocumentEvent>
>  const&) + 156 (libdbalo.dylib + 1138600) [0x376ce5fa8]
>                   1001  
> dbaccess::DocumentEventExecutor::documentEventOccured(com::sun::star::document::DocumentEvent
>  const&) + 1500 (libdbalo.dylib + 1125476) [0x376ce2c64]
>                     1001  non-virtual thunk to 
> scripting_protocolhandler::ScriptProtocolHandler::dispatch(com::sun::star::util::URL
>  const&, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> 
> const&) + 52 (libprotocolhandlerlo.dylib + 13816) [0x37512b5f8]
>                       1001  
> scripting_protocolhandler::ScriptProtocolHandler::dispatchWithNotification(com::sun::star::util::URL
>  const&, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> 
> const&, 
> com::sun::star::uno::Reference<com::sun::star::frame::XDispatchResultListener>
>  const&) + 1292 (libprotocolhandlerlo.dylib + 7568) [0x375129d90]
>                         1001  
> basprov::BasicScriptImpl::invoke(com::sun::star::uno::Sequence<com::sun::star::uno::Any>
>  const&, com::sun::star::uno::Sequence<short>&, 
> com::sun::star::uno::Sequence<com::sun::star::uno::Any>&) + 1168 
> (libbasprovlo.dylib + 63808) [0x375e27940]
>                           1001  SbMethod::Call(SbxValue*, SbxVariable*) + 232 
> (libsblo.dylib + 362948) [0x1032909c4]
>                             1001  SbxValue::Get(SbxValues&) const + 216 
> (libsblo.dylib + 977972) [0x103326c34]
>                               1001  SbMethod::Broadcast(SfxHintId) + 288 
> (libsblo.dylib + 363620) [0x103290c64]
>                                 1001  SfxBroadcaster::Broadcast(SfxHint 
> const&) + 88 (libsvllo.dylib + 386820) [0x10377a704]
>                                   1001  SbModule::Notify(SfxBroadcaster&, 
> SfxHint const&) + 1300 (libsblo.dylib + 345536) [0x10328c5c0]
>                                     1001  SbModule::Run(SbMethod*) + 1308 
> (libsblo.dylib + 347288) [0x10328cc98]
>                                       1001  SbiRuntime::Step() + 484 
> (libsblo.dylib + 726788) [0x1032e9704]
>                                         1001  SbiRuntime::StepELEM(unsigned 
> int, unsigned int) + 532 (libsblo.dylib + 710068) [0x1032e55b4]
>                                           1001  
> SbiRuntime::FindElement(SbxObject*, unsigned int, unsigned int, ErrCode, 
> bool, bool) + 1000 (libsblo.dylib + 748608) [0x1032eec40]
>                                             1001  
> SbxMethod::SbxMethod(SbxMethod const&) + 60 (libsblo.dylib + 958364) 
> [0x103321f9c]
>                                               1001  
> SbxVariable::SbxVariable(SbxVariable const&) + 44 (libsblo.dylib + 991284) 
> [0x10332a034]
>                                                 1001  
> SbxValue::SbxValue(SbxValue const&) + 168 (libsblo.dylib + 976196) 
> [0x103326544]
>                                                   1001  
> SbxVariable::Broadcast(SfxHintId) + 308 (libsblo.dylib + 994000) [0x10332aad0]
>                                                     1001  
> SfxBroadcaster::Broadcast(SfxHint const&) + 88 (libsvllo.dylib + 386820) 
> [0x10377a704]
>                                                       1001  
> SbUnoObject::Notify(SfxBroadcaster&, SfxHint const&) + 1884 (libsblo.dylib + 
> 215164) [0x10326c87c]
>                                                         1001  
> stoc_corefl::(anonymous 
> namespace)::IdlInterfaceMethodImpl::invoke(com::sun::star::uno::Any const&, 
> com::sun::star::uno::Sequence<com::sun::star::uno::Any>&) + 1804 
> (libreflectionlo.dylib + 72068) [0x375ea5984]
>                                                           1001  
> unoInterfaceProxyDispatch + 620 (libgcc3_uno.dylib + 24148) [0x106b65e54]
>                                                             1001  (anonymous 
> namespace)::call(bridges::cpp_uno::shared::UnoInterfaceProxy*, 
> bridges::cpp_uno::shared::VtableSlot, _typelib_TypeDescriptionReference*, 
> int, _typelib_MethodParameter*, void*, void**, _uno_Any**) + 1824 
> (libgcc3_uno.dylib + 26024) [0x106b665a8]
>                                                               1001  
> callVirtualFunction(unsigned long, unsigned long*, unsigned long*, unsigned 
> long*, int, void*) + 188 (libgcc3_uno.dylib + 14028) [0x106b636cc]
>                                                                 1001  
> dbaccess::ODocumentDefinition::impl_openUI_nolck_throw(bool) + 360 
> (libdbalo.dylib + 1104368) [0x376cdd9f0]
>                                                                   1001  
> dbaui::OApplicationController::loadComponent(int, rtl::OUString const&, 
> unsigned char) + 184 (libdbulo.dylib + 156188) [0x38002621c]
>                                                                     1001  
> dbaui::OApplicationController::loadComponentWithArguments(int, rtl::OUString 
> const&, unsigned char, 
> com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&) + 
> 220 (libdbulo.dylib + 156856) [0x3800264b8]
>                                                                       1001  
> dbaui::OApplicationController::openElementWithArguments(rtl::OUString const&, 
> dbaui::ElementType, dbaui::ElementOpenMode, unsigned short, 
> comphelper::NamedValueCollection const&) + 516 (libdbulo.dylib + 65844) 
> [0x380010134]
>                                                                         1001  
> dbaui::OLinkedDocumentsAccess::open(rtl::OUString const&, 
> com::sun::star::uno::Reference<com::sun::star::lang::XComponent>&, 
> dbaui::ElementOpenMode, comphelper::NamedValueCollection const&) + 108 
> (libdbulo.dylib + 1369916) [0x38014e73c]
>                                                                           
> 1001  dbaui::OLinkedDocumentsAccess::impl_open(rtl::OUString const&, 
> com::sun::star::uno::Reference<com::sun::star::lang::XComponent>&, 
> dbaui::ElementOpenMode, comphelper::NamedValueCollection const&) + 1108 
> (libdbulo.dylib + 1361768) [0x38014c768]
>                                                                             
> 1001  dbaccess::ODocumentContainer::loadComponentFromURL(rtl::OUString 
> const&, rtl::OUString const&, int, 
> com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&) + 
> 984 (libdbalo.dylib + 1033752) [0x376ccc618]
>                                                                               
> 1001  dbaccess::ODocumentDefinition::execute(com::sun::star::ucb::Command 
> const&, int, 
> com::sun::star::uno::Reference<com::sun::star::ucb::XCommandEnvironment> 
> const&) + 2140 (libdbalo.dylib + 1080912) [0x376cd7e50]
>                                                                               
>   1001  
> dbaccess::ODocumentDefinition::onCommandOpenSomething(com::sun::star::uno::Any
>  const&, bool, 
> com::sun::star::uno::Reference<com::sun::star::ucb::XCommandEnvironment> 
> const&) + 1796 (libdbalo.dylib + 1071128) [0x376cd5818]
>                                                                               
>     1001  
> dbaccess::ODocumentDefinition::loadEmbeddedObject(com::sun::star::uno::Reference<com::sun::star::sdbc::XConnection>
>  const&, com::sun::star::uno::Sequence<signed char> const&, 
> com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&, 
> bool, bool) + 2748 (libdbalo.dylib + 1052852) [0x376cd10b4]
>                                                                               
>       1001  OCommonEmbeddedObject::changeState(int) + 244 (libembobj.dylib + 
> 27632) [0x380c06bf0]
>                                                                               
>         1001  OCommonEmbeddedObject::SwitchStateTo_Impl(int) + 2376 
> (libembobj.dylib + 20204) [0x380c04eec]
>                                                                               
>           1001  OCommonEmbeddedObject::LoadDocumentFromStorage_Impl() + 136 
> (libembobj.dylib + 81552) [0x380c13e90]
>                                                                               
>             1001  
> CreateDocument(com::sun::star::uno::Reference<com::sun::star::uno::XComponentContext>
>  const&, rtl::OUString const&, bool, bool) + 412 (libembobj.dylib + 76252) 
> [0x380c129dc]
>                                                                               
>               1001  
> cppuhelper::ServiceManager::createInstanceWithArgumentsAndContext(rtl::OUString
>  const&, com::sun::star::uno::Sequence<com::sun::star::uno::Any> const&, 
> com::sun::star::uno::Reference<com::sun::star::uno::XComponentContext> 
> const&) + 92 (libuno_cppuhelpergcc3.dylib.3 + 270916) [0x103172244]
>                                                                               
>                 1001  
> cppuhelper::ServiceManager::Data::Implementation::createInstanceWithArguments(com::sun::star::uno::Reference<com::sun::star::uno::XComponentContext>
>  const&, bool, com::sun::star::uno::Sequence<com::sun::star::uno::Any> 
> const&) + 200 (libuno_cppuhelpergcc3.dylib.3 + 255632) [0x10316e690]
>                                                                               
>                   1001  
> cppuhelper::ServiceManager::Data::Implementation::doCreateInstanceWithArguments(com::sun::star::uno::Reference<com::sun::star::uno::XComponentContext>
>  const&, com::sun::star::uno::Sequence<com::sun::star::uno::Any> const&) + 88 
> (libuno_cppuhelpergcc3.dylib.3 + 255864) [0x10316e778]
>                                                                               
>                     1001  Writer_SwTextDocument_get_implementation + 68 
> (libswlo.dylib + 9755552) [0x3c5d29ba0]
>                                                                               
>                       1001  rtl::Static<(anonymous namespace)::SwDLLInstance, 
> (anonymous namespace)::theSwDLLInstance>::get() + 180 (libswlo.dylib + 
> 8002928) [0x3c5b7dd70]
>                                                                               
>                         1001  SwDLL::SwDLL() + 184 (libswlo.dylib + 8003464) 
> [0x3c5b7df88]
>                                                                               
>                           1001  SwModule::SwModule(SfxObjectFactory*, 
> SfxObjectFactory*, SfxObjectFactory*) + 640 (libswlo.dylib + 8017284) 
> [0x3c5b81584]
>                                                                               
>                             1001  
> SwLinguServiceEventListener::SwLinguServiceEventListener() + 228 
> (libswlo.dylib + 9703028) [0x3c5d1ce74]
>                                                                               
>                               1001  
> com::sun::star::linguistic2::LinguServiceManager::create(com::sun::star::uno::Reference<com::sun::star::uno::XComponentContext>
>  const&) + 136 (libswlo.dylib + 9703976) [0x3c5d1d228]
>                                                                               
>                                 1001  
> cppuhelper::ServiceManager::createInstanceWithContext(rtl::OUString const&, 
> com::sun::star::uno::Reference<com::sun::star::uno::XComponentContext> 
> const&) + 80 (libuno_cppuhelpergcc3.dylib.3 + 270192) [0x103171f70]
>                                                                               
>                                   1001  
> cppuhelper::ServiceManager::Data::Implementation::createInstance(com::sun::star::uno::Reference<com::sun::star::uno::XComponentContext>
>  const&, bool) + 104 (libuno_cppuhelpergcc3.dylib.3 + 254296) [0x10316e158]
>                                                                               
>                                     1001  
> cppuhelper::ServiceManager::Data::Implementation::doCreateInstance(com::sun::star::uno::Reference<com::sun::star::uno::XComponentContext>
>  const&) + 160 (libuno_cppuhelpergcc3.dylib.3 + 254676) [0x10316e2d4]
>                                                                               
>                                       1001  
> linguistic_LngSvcMgr_get_implementation + 28 (liblnglo.dylib + 312640) 
> [0x106634540]
>                                                                               
>                                         1001  LngSvcMgr::LngSvcMgr() + 1000 
> (liblnglo.dylib + 258908) [0x10662735c]
>                                                                               
>                                           1001  LngSvcMgr::UpdateAll() + 544 
> (liblnglo.dylib + 261408) [0x106627d20]
>                                                                               
>                                             1001  
> LngSvcMgr::getAvailableServices(rtl::OUString const&, 
> com::sun::star::lang::Locale const&) + 488 (liblnglo.dylib + 297812) 
> [0x106630b54]
>                                                                               
>                                               1001  
> LngSvcMgr::GetAvailableSpellSvcs_Impl() + 948 (liblnglo.dylib + 288960) 
> [0x10662e8c0]
>                                                                               
>                                                 1001  
> MacSpellChecker::getLocales() + 116 (libMacOSXSpelllo.dylib + 19532) 
> [0x376748c4c]
>                                                                               
>                                                   1001  +[NSSpellChecker 
> sharedSpellChecker] + 140 (AppKit + 2037144) [0x1a4e88598]

At least one culprit appears to be the

>         ::SolarMutexGuard aSolarGuard;

in ODocumentDefinition::execute
(dbaccess/source/core/dataaccess/documentdefinition.cxx) that was originally
introduced in
<https://git.libreoffice.org/core/+/7c5b2130b651f7417f1c16457b132f9d7d043422%5E!>
"a little less deadlock-prone ...", but there may be even more places along the
call chain that also (recursively) lock the SolarMutex.

-- 
You are receiving this mail because:
You are the assignee for the bug.

Reply via email to