office-gobmx/reportdesign/source
Noel Grandin f9ff22db05 tsan:lock-order-inversion in forms
==================
WARNING: ThreadSanitizer: lock-order-inversion (potential deadlock)
(pid=14614)
Cycle in lock order graph: M0 (0x720c004ac190) => M1 (0x720c004a8200) =>
M0

Mutex M1 acquired here while holding mutex M0 in thread T43:
2 osl::Mutex::acquire() /home/noel/libo-tsan/include/osl/mutex.hxx:63
(libuno_cppuhelpergcc3.so.3+0x8fdd9)
3 osl::Guard<osl::Mutex>::Guard(osl::Mutex&)
/home/noel/libo-tsan/include/osl/mutex.hxx:144
(libuno_cppuhelpergcc3.so.3+0x8fdd9)
4 cppu::OBroadcastHelperVar<cppu::OMultiTypeInterfaceContainerHelper,
com::sun::uno::Type>::addListener(com::sun::uno::Type
const&, com::sun::uno::Reference<com::sun::uno::XInterface>
const&) /home/noel/libo-tsan/include/cppuhelper/interfacecontainer.h:468
(libuno_cppuhelpergcc3.so.3+0x8fdd9)
5
cppu::OPropertySetHelper::addPropertiesChangeListener(com::sun::uno::Sequence<rtl::OUString>
const&,
com::sun::uno::Reference<com::sun:🫘:XPropertiesChangeListener>
const&) /home/noel/libo-tsan/cppuhelper/source/propshlp.cxx:912
(libuno_cppuhelpergcc3.so.3+0x8fdd9)
6
comphelper::OPropertySetAggregationHelper::addPropertiesChangeListener(com::sun::uno::Sequence<rtl::OUString>
const&,
com::sun::uno::Reference<com::sun:🫘:XPropertiesChangeListener>
const&) /home/noel/libo-tsan/comphelper/source/property/propagg.cxx:495
(libcomphelper.so+0x1a1865)
7 comphelper::OPropertySetAggregationHelper::startListening()
/home/noel/libo-tsan/comphelper/source/property/propagg.cxx:466
(libcomphelper.so+0x1a1416)
^^^ Mutex M0 previously acquired by the same thread here:
8
comphelper::OPropertySetAggregationHelper::addPropertyChangeListener(rtl::OUString
const&,
com::sun::uno::Reference<com::sun:🫘:XPropertyChangeListener>
const&) /home/noel/libo-tsan/comphelper/source/property/propagg.cxx:488
(libcomphelper.so+0x1a181a)
9 non-virtual thunk to
comphelper::OPropertySetAggregationHelper::addPropertyChangeListener(rtl::OUString
const&,
com::sun::uno::Reference<com::sun:🫘:XPropertyChangeListener>
const&) /home/noel/libo-tsan/comphelper/source/property/propagg.cxx:?
(libcomphelper.so+0x1a181a)
10 frm::OInterfaceContainer::implInsert(int,
com::sun::uno::Reference<com::sun:🫘:XPropertySet>
const&, bool, frm::ElementDescription*, bool)
/home/noel/libo-tsan/forms/source/misc/InterfaceContainer.cxx:787
(libfrmlo.so+0x23e03c)
11 frm::OInterfaceContainer::insertByIndex(int, com::sun::uno::Any
const&)
/home/noel/libo-tsan/forms/source/misc/InterfaceContainer.cxx:904
(libfrmlo.so+0x240644)
12 non-virtual thunk to frm::OInterfaceContainer::insertByIndex(int,
com::sun::uno::Any const&)
/home/noel/libo-tsan/forms/source/misc/InterfaceContainer.cxx:?
(libfrmlo.so+0x240716)
13 FmXUndoEnvironment::Inserted(FmFormObj*)
/home/noel/libo-tsan/svx/source/form/fmundo.cxx:424
(libsvxcorelo.so+0x41b2a4)
14 FmXUndoEnvironment::Inserted(SdrObject*)
/home/noel/libo-tsan/svx/source/form/fmundo.cxx:336
(libsvxcorelo.so+0x41a982)
15 FmXUndoEnvironment::Notify(SfxBroadcaster&, SfxHint const&)
/home/noel/libo-tsan/svx/source/form/fmundo.cxx:292
(libsvxcorelo.so+0x41a8a0)
16 non-virtual thunk to FmXUndoEnvironment::Notify(SfxBroadcaster&,
SfxHint const&) /home/noel/libo-tsan/svx/source/form/fmundo.cxx:?
(libsvxcorelo.so+0x41acd2)
17 SfxBroadcaster::Broadcast(SfxHint const&)
/home/noel/libo-tsan/svl/source/notify/SfxBroadcaster.cxx:40
(libsvllo.so+0xe7c3d)
18 SdrObjList::InsertObject(SdrObject*, unsigned long)
/home/noel/libo-tsan/svx/source/svdraw/svdpage.cxx:351
(libsvxcorelo.so+0x6fdf3a)
19 FmFormPage::InsertObject(SdrObject*, unsigned long)
/home/noel/libo-tsan/svx/source/form/fmpage.cxx:79
(libsvxcorelo.so+0x3c1e05)
20
SvxDrawPage::add(com::sun::uno::Reference<com::sun::drawing::XShape>
const&) /home/noel/libo-tsan/svx/source/unodraw/unopage.cxx:191
(libsvxcorelo.so+0x850c7b)
21
SwFmDrawPage::add(com::sun::uno::Reference<com::sun::drawing::XShape>
const&) /home/noel/libo-tsan/sw/source/core/unocore/unodraw.cxx:649
(libswlo.so+0xc30712)
22 non-virtual thunk to
SwFmDrawPage::add(com::sun::uno::Reference<com::sun::drawing::XShape>
const&) /home/noel/libo-tsan/sw/source/core/unocore/unodraw.cxx:?
(libswlo.so+0xc31732)
23 gcc3::callVirtualMethod(void*, unsigned int, void*,
_typelib_TypeDescriptionReference*, bool, unsigned long*, unsigned int,
unsigned long*, double*)
/home/noel/libo-tsan/bridges/source/cpp_uno/gcc3_linux_x86-64/callvirtualmethod.cxx:87
(libgcc3_uno.so+0xd92a)
24 cpp_call(bridges::cpp_uno::shared::UnoInterfaceProxy*,
bridges::cpp_uno::shared::VtableSlot,
_typelib_TypeDescriptionReference*, int, _typelib_MethodParameter*,
void*, void**, _uno_Any**)
/home/noel/libo-tsan/bridges/source/cpp_uno/gcc3_linux_x86-64/uno2cpp.cxx:229
(libgcc3_uno.so+0xcc3c)
25 unoInterfaceProxyDispatch
/home/noel/libo-tsan/bridges/source/cpp_uno/gcc3_linux_x86-64/uno2cpp.cxx:409
(libgcc3_uno.so+0xc1f6)

Mutex M0 acquired here while holding mutex M1 in thread T44:
3 osl::Guard<osl::Mutex>::Guard(osl::Mutex&)
/home/noel/libo-tsan/include/osl/mutex.hxx:144
(libcomphelper.so+0x1bde34)
4
comphelper::OPropertyChangeListener::setAdapter(comphelper::OPropertyChangeMultiplexer*)
/home/noel/libo-tsan/comphelper/source/property/propmultiplex.cxx:58
(libcomphelper.so+0x1bde34)
5
comphelper::OPropertyChangeMultiplexer::disposing(com::sun::lang::EventObject
const&)
/home/noel/libo-tsan/comphelper/source/property/propmultiplex.cxx:120
(libcomphelper.so+0x1bde34)
6 non-virtual thunk to
comphelper::OPropertyChangeMultiplexer::disposing(com::sun::lang::EventObject
const&)
/home/noel/libo-tsan/comphelper/source/property/propmultiplex.cxx:?
(libcomphelper.so+0x1bdf12)
7
cppu::OInterfaceContainerHelper::disposeAndClear(com::sun::lang::EventObject
const&)
/home/noel/libo-tsan/cppuhelper/source/interfacecontainer.cxx:272
(libuno_cppuhelpergcc3.so.3+0x66524)
8
cppu::OMultiTypeInterfaceContainerHelperInt32::disposeAndClear(com::sun::lang::EventObject
const&)
/home/noel/libo-tsan/cppuhelper/source/interfacecontainer.cxx:577
(libuno_cppuhelpergcc3.so.3+0x68af0)
9 cppu::OPropertySetHelper::disposing()
/home/noel/libo-tsan/cppuhelper/source/propshlp.cxx:246
(libuno_cppuhelpergcc3.so.3+0x8be45)
10 comphelper::OPropertySetAggregationHelper::disposing()
/home/noel/libo-tsan/comphelper/source/property/propagg.cxx:366
(libcomphelper.so+0x1a0321)
^^^ Mutex M1 previously acquired by the same thread here:
11 frm::OControlModel::disposing()
/home/noel/libo-tsan/forms/source/component/FormComponent.cxx:705
(libfrmlo.so+0x19eecc)
12 frm::ORichTextModel::disposing()
/home/noel/libo-tsan/forms/source/richtext/richtextmodel.cxx:295
(libfrmlo.so+0x267bdb)
13 cppu::OComponentHelper::dispose()
/home/noel/libo-tsan/cppuhelper/source/component.cxx:159
(libuno_cppuhelpergcc3.so.3+0x4504f)
14 non-virtual thunk to cppu::OComponentHelper::dispose()
/home/noel/libo-tsan/cppuhelper/source/component.cxx:?
(libuno_cppuhelpergcc3.so.3+0x45379)
15 frm::OControlModel::disposing()
/home/noel/libo-tsan/forms/source/component/FormComponent.cxx:708
(libfrmlo.so+0x19ef13)
16 frm::OBoundControlModel::disposing()
/home/noel/libo-tsan/forms/source/component/FormComponent.cxx:1340
(libfrmlo.so+0x1a507f)
17 frm::OEditModel::disposing()
/home/noel/libo-tsan/forms/source/component/Edit.cxx:301
(libfrmlo.so+0x161208)
18 cppu::OComponentHelper::dispose()
/home/noel/libo-tsan/cppuhelper/source/component.cxx:159
(libuno_cppuhelpergcc3.so.3+0x4504f)
19 non-virtual thunk to cppu::OComponentHelper::dispose()
/home/noel/libo-tsan/cppuhelper/source/component.cxx:?
(libuno_cppuhelpergcc3.so.3+0x45379)
20 SdrUnoObj::~SdrUnoObj()
/home/noel/libo-tsan/svx/source/svdraw/svdouno.cxx:214
(libsvxcorelo.so+0x6f471b)
21 FmFormObj::~FmFormObj()
/home/noel/libo-tsan/svx/source/form/fmobj.cxx:119
(libsvxcorelo.so+0x3bd8cf)
22 FmFormObj::~FmFormObj()
/home/noel/libo-tsan/svx/source/form/fmobj.cxx:112
(libsvxcorelo.so+0x3bd985)
23 SdrObject::release()
/home/noel/libo-tsan/svx/source/svdraw/svdobj.cxx:486
(libsvxcorelo.so+0x6634df)
24 rtl::Reference<SdrObject>::~Reference()
/home/noel/libo-tsan/include/rtl/ref.hxx:126 (libsvxcorelo.so+0x61610d)
25 void std::destroy_at<rtl::Reference<SdrObject>
>(rtl::Reference<SdrObject>*)
/usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/stl_construct.h:88
(libsvxcorelo.so+0x61610d)
26 void std::_Destroy<rtl::Reference<SdrObject>
>(rtl::Reference<SdrObject>*)
/usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/stl_construct.h:149
(libsvxcorelo.so+0x61610d)
27 void
std::_Destroy_aux<false>::__destroy<rtl::Reference<SdrObject>*>(rtl::Reference<SdrObject>*,
rtl::Reference<SdrObject>*)
/usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/stl_construct.h:163
(libsvxcorelo.so+0x61610d)
28 void
std::_Destroy<rtl::Reference<SdrObject>*>(rtl::Reference<SdrObject>*,
rtl::Reference<SdrObject>*)
/usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/stl_construct.h:195
(libsvxcorelo.so+0x61610d)
29 void std::_Destroy<rtl::Reference<SdrObject>*,
rtl::Reference<SdrObject> >(rtl::Reference<SdrObject>*,
rtl::Reference<SdrObject>*, std::allocator<rtl::Reference<SdrObject> >&)
/usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/alloc_traits.h:948
(libsvxcorelo.so+0x61610d)
30 std::vector<rtl::Reference<SdrObject>,
std::allocator<rtl::Reference<SdrObject> > >::~vector()
/usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/stl_vector.h:735
(libsvxcorelo.so+0x61610d)
31 SdrModel::ClearModel(bool)
/home/noel/libo-tsan/svx/source/svdraw/svdmodel.cxx:623
(libsvxcorelo.so+0x61610d)
32 SwDrawModel::~SwDrawModel()
/home/noel/libo-tsan/sw/source/core/draw/drawdoc.cxx:108
(libswlo.so+0x714650)
33 std::default_delete<SwDrawModel>::operator()(SwDrawModel*) const
/usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/unique_ptr.h:99
(libswlo.so+0x5a3082)
34 std::__uniq_ptr_impl<SwDrawModel, std::default_delete<SwDrawModel>
>::reset(SwDrawModel*)
/usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/unique_ptr.h:211
(libswlo.so+0x5a3082)
35 std::unique_ptr<SwDrawModel, std::default_delete<SwDrawModel>
>::reset(SwDrawModel*)
/usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/unique_ptr.h:509
(libswlo.so+0x5a3082)
36 sw::DocumentDrawModelManager::ReleaseDrawModel()
/home/noel/libo-tsan/sw/source/core/doc/DocumentDrawModelManager.cxx:162
(libswlo.so+0x5a3082)
37 SwDoc::~SwDoc()
/home/noel/libo-tsan/sw/source/core/doc/docnew.cxx:585
(libswlo.so+0x5457c8)
38 SwDoc::release() /home/noel/libo-tsan/sw/source/core/doc/doc.cxx:129
(libswlo.so+0x4b8993)
39 rtl::Reference<SwDoc>::clear()
/home/noel/libo-tsan/include/rtl/ref.hxx:193 (libswlo.so+0x104c301)
40 SwDocShell::RemoveLink()
/home/noel/libo-tsan/sw/source/uibase/app/docshini.cxx:444
(libswlo.so+0x104c301)
41 SwDocShell::~SwDocShell()
/home/noel/libo-tsan/sw/source/uibase/app/docshini.cxx:372
(libswlo.so+0x104bf36)
42 SwDocShell::~SwDocShell()
/home/noel/libo-tsan/sw/source/uibase/app/docshini.cxx:362
(libswlo.so+0x104c469)
43 non-virtual thunk to SwDocShell::~SwDocShell()
/home/noel/libo-tsan/sw/source/uibase/app/docshini.cxx:?
(libswlo.so+0x104c469)
44 cppu::OWeakObject::release()
/home/noel/libo-tsan/cppuhelper/source/weak.cxx:230
(libuno_cppuhelpergcc3.so.3+0x105ae7)
45 rtl::Reference<SfxObjectShell>::~Reference()
/home/noel/libo-tsan/include/rtl/ref.hxx:126 (libsfxlo.so+0x5209e5)
46 IMPL_SfxBaseModel_DataContainer::~IMPL_SfxBaseModel_DataContainer()
/home/noel/libo-tsan/sfx2/source/doc/sfxbasemodel.cxx:265
(libsfxlo.so+0x5209e5)
47 void
std::destroy_at<IMPL_SfxBaseModel_DataContainer>(IMPL_SfxBaseModel_DataContainer*)
/usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/stl_construct.h:88
(libsfxlo.so+0x51f4e6)
48 void
std::_Destroy<IMPL_SfxBaseModel_DataContainer>(IMPL_SfxBaseModel_DataContainer*)
/usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/stl_construct.h:149
(libsfxlo.so+0x51f4e6)
49 void std::allocator_traits<std::allocator<void>
>::destroy<IMPL_SfxBaseModel_DataContainer>(std::allocator<void>&,
IMPL_SfxBaseModel_DataContainer*)
/usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/alloc_traits.h:675
(libsfxlo.so+0x51f4e6)
50 std::_Sp_counted_ptr_inplace<IMPL_SfxBaseModel_DataContainer,
std::allocator<void>, (__gnu_cxx::_Lock_policy)2>::_M_dispose()
/usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/shared_ptr_base.h:613
(libsfxlo.so+0x51f4e6)
51 SfxBaseModel::dispose()
/usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/shared_ptr_base.h:175
(libsfxlo.so+0x4e7c7c)
52 SwXTextDocument::dispose()
/home/noel/libo-tsan/sw/source/uibase/uno/unotxdoc.cxx:562
(libswlo.so+0x13896e1)
53 SfxBaseModel::close(unsigned char)
/home/noel/libo-tsan/sfx2/source/doc/sfxbasemodel.cxx:1526
(libsfxlo.so+0x4eed16)
54 SwXTextDocument::close(unsigned char)
/home/noel/libo-tsan/sw/source/uibase/uno/unotxdoc.cxx:575
(libswlo.so+0x138999c)
55 non-virtual thunk to SwXTextDocument::close(unsigned char)
/home/noel/libo-tsan/sw/source/uibase/uno/unotxdoc.cxx:?
(libswlo.so+0x1389ad3)
56 gcc3::callVirtualMethod(void*, unsigned int, void*,
_typelib_TypeDescriptionReference*, bool, unsigned long*, unsigned int,
unsigned long*, double*)
/home/noel/libo-tsan/bridges/source/cpp_uno/gcc3_linux_x86-64/callvirtualmethod.cxx:87
(libgcc3_uno.so+0xd92a)

Change-Id: Ie16fc0ff7462632a591a46025a38344006d43c30
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173068
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2024-09-09 16:08:42 +02:00
..
core use less dynamic_cast when broadcasting SfxHint 2024-09-03 21:41:08 +02:00
filter/xml
inc
ui tsan:lock-order-inversion in forms 2024-09-09 16:08:42 +02:00