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>
This commit is contained in:
parent
07db236244
commit
f9ff22db05
15 changed files with 38 additions and 26 deletions
|
@ -32,8 +32,13 @@ using namespace ::com::sun::star::beans;
|
|||
|
||||
OPropertyChangeListener::~OPropertyChangeListener()
|
||||
{
|
||||
if (m_xAdapter.is())
|
||||
m_xAdapter->dispose();
|
||||
rtl::Reference<OPropertyChangeMultiplexer> xTmpAdapter;
|
||||
{
|
||||
std::unique_lock aGuard(m_aAdapterMutex);
|
||||
xTmpAdapter = std::move(m_xAdapter);
|
||||
}
|
||||
if ( xTmpAdapter.is() )
|
||||
xTmpAdapter->dispose();
|
||||
}
|
||||
|
||||
|
||||
|
@ -45,8 +50,13 @@ void OPropertyChangeListener::_disposing(const EventObject&)
|
|||
|
||||
void OPropertyChangeListener::disposeAdapter()
|
||||
{
|
||||
if ( m_xAdapter.is() )
|
||||
m_xAdapter->dispose();
|
||||
rtl::Reference<OPropertyChangeMultiplexer> xTmpAdapter;
|
||||
{
|
||||
std::unique_lock aGuard(m_aAdapterMutex);
|
||||
xTmpAdapter = std::move(m_xAdapter);
|
||||
}
|
||||
if ( xTmpAdapter.is() )
|
||||
xTmpAdapter->dispose();
|
||||
|
||||
// will automatically set a new adapter
|
||||
OSL_ENSURE( !m_xAdapter.is(), "OPropertyChangeListener::disposeAdapter: what did dispose do?" );
|
||||
|
@ -55,7 +65,7 @@ void OPropertyChangeListener::disposeAdapter()
|
|||
|
||||
void OPropertyChangeListener::setAdapter(OPropertyChangeMultiplexer* pAdapter)
|
||||
{
|
||||
::osl::MutexGuard aGuard(m_rMutex);
|
||||
std::unique_lock aGuard(m_aAdapterMutex);
|
||||
m_xAdapter = pAdapter;
|
||||
}
|
||||
|
||||
|
|
|
@ -82,7 +82,7 @@ namespace pcr
|
|||
|
||||
SubmissionPropertyHandler::SubmissionPropertyHandler( const Reference< XComponentContext >& _rxContext )
|
||||
:PropertyHandlerComponent( _rxContext )
|
||||
,OPropertyChangeListener( m_aMutex )
|
||||
,OPropertyChangeListener()
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
@ -226,7 +226,7 @@ Any SAL_CALL ODatabaseForm::queryAggregation(const Type& _rType)
|
|||
ODatabaseForm::ODatabaseForm(const Reference<XComponentContext>& _rxContext)
|
||||
:OFormComponents(_rxContext)
|
||||
,OPropertySetAggregationHelper(OComponentHelper::rBHelper)
|
||||
,OPropertyChangeListener(m_aMutex)
|
||||
,OPropertyChangeListener()
|
||||
,m_aLoadListeners(m_aMutex)
|
||||
,m_aRowSetApproveListeners(m_aMutex)
|
||||
,m_aSubmitListeners(m_aMutex)
|
||||
|
@ -256,7 +256,7 @@ ODatabaseForm::ODatabaseForm(const Reference<XComponentContext>& _rxContext)
|
|||
ODatabaseForm::ODatabaseForm( const ODatabaseForm& _cloneSource )
|
||||
:OFormComponents( _cloneSource )
|
||||
,OPropertySetAggregationHelper( OComponentHelper::rBHelper )
|
||||
,OPropertyChangeListener( m_aMutex )
|
||||
,OPropertyChangeListener()
|
||||
,ODatabaseForm_BASE1()
|
||||
,ODatabaseForm_BASE2()
|
||||
,ODatabaseForm_BASE3()
|
||||
|
|
|
@ -1133,7 +1133,7 @@ OBoundControlModel::OBoundControlModel(
|
|||
const OUString& _rUnoControlModelTypeName, const OUString& _rDefault,
|
||||
const bool _bCommitable, const bool _bSupportExternalBinding, const bool _bSupportsValidation )
|
||||
:OControlModel( _rxFactory, _rUnoControlModelTypeName, _rDefault, false )
|
||||
,OPropertyChangeListener( m_aMutex )
|
||||
,OPropertyChangeListener()
|
||||
,m_nValuePropertyAggregateHandle( -1 )
|
||||
,m_nFieldType( DataType::OTHER )
|
||||
,m_bValuePropertyMayBeVoid( false )
|
||||
|
@ -1162,7 +1162,7 @@ OBoundControlModel::OBoundControlModel(
|
|||
OBoundControlModel::OBoundControlModel(
|
||||
const OBoundControlModel* _pOriginal, const Reference< XComponentContext>& _rxFactory )
|
||||
:OControlModel( _pOriginal, _rxFactory, true, false )
|
||||
,OPropertyChangeListener( m_aMutex )
|
||||
,OPropertyChangeListener()
|
||||
,m_nValuePropertyAggregateHandle( _pOriginal->m_nValuePropertyAggregateHandle )
|
||||
,m_nFieldType( DataType::OTHER )
|
||||
,m_bValuePropertyMayBeVoid( _pOriginal->m_bValuePropertyMayBeVoid )
|
||||
|
|
|
@ -441,7 +441,7 @@ namespace frm
|
|||
OClickableImageBaseModel::OClickableImageBaseModel( const Reference< XComponentContext >& _rxFactory, const OUString& _rUnoControlModelTypeName,
|
||||
const OUString& rDefault )
|
||||
:OControlModel( _rxFactory, _rUnoControlModelTypeName, rDefault )
|
||||
,OPropertyChangeListener(m_aMutex)
|
||||
,OPropertyChangeListener()
|
||||
,m_bDispatchUrlInternal(false)
|
||||
,m_bProdStarted(false)
|
||||
{
|
||||
|
@ -452,7 +452,7 @@ namespace frm
|
|||
|
||||
OClickableImageBaseModel::OClickableImageBaseModel( const OClickableImageBaseModel* _pOriginal, const Reference<XComponentContext>& _rxFactory )
|
||||
:OControlModel( _pOriginal, _rxFactory )
|
||||
,OPropertyChangeListener( m_aMutex )
|
||||
,OPropertyChangeListener()
|
||||
,m_xGraphicObject( _pOriginal->m_xGraphicObject )
|
||||
,m_bDispatchUrlInternal(false)
|
||||
,m_bProdStarted( false )
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include <cppuhelper/implbase.hxx>
|
||||
#include <comphelper/comphelperdllapi.h>
|
||||
#include <rtl/ref.hxx>
|
||||
#include <mutex>
|
||||
#include <vector>
|
||||
|
||||
namespace com::sun::star::beans { class XPropertySet; }
|
||||
|
@ -46,11 +47,12 @@ namespace comphelper
|
|||
friend class OPropertyChangeMultiplexer;
|
||||
|
||||
rtl::Reference<OPropertyChangeMultiplexer> m_xAdapter;
|
||||
::osl::Mutex& m_rMutex;
|
||||
// We have our own mutex here for the m_xAdapter field, because we sit between two different objects
|
||||
// which often have their own mutexes, and if we use a mutex from one of them,
|
||||
// we end up with ABBA deadlock risks.
|
||||
std::mutex m_aAdapterMutex;
|
||||
|
||||
public:
|
||||
OPropertyChangeListener(::osl::Mutex& _rMutex)
|
||||
: m_rMutex(_rMutex) { }
|
||||
virtual ~OPropertyChangeListener();
|
||||
|
||||
/// @throws css::uno::RuntimeException
|
||||
|
|
|
@ -61,7 +61,7 @@ IMPL_LINK(OAddFieldWindow, DragBeginHdl, bool&, rUnsetDragIcon, bool)
|
|||
|
||||
OAddFieldWindow::OAddFieldWindow(weld::Window* pParent, uno::Reference< beans::XPropertySet > xRowSet)
|
||||
: GenericDialogController(pParent, u"modules/dbreport/ui/floatingfield.ui"_ustr, u"FloatingField"_ustr)
|
||||
, ::comphelper::OPropertyChangeListener(m_aMutex)
|
||||
, ::comphelper::OPropertyChangeListener()
|
||||
, ::comphelper::OContainerListener(m_aMutex)
|
||||
, m_xRowSet(std::move(xRowSet))
|
||||
, m_xActions(m_xBuilder->weld_toolbar(u"toolbox"_ustr))
|
||||
|
|
|
@ -785,7 +785,7 @@ Size OFieldExpressionControl::GetOptimalSize() const
|
|||
OGroupsSortingDialog::OGroupsSortingDialog(weld::Window* pParent, bool bReadOnly,
|
||||
OReportController* pController)
|
||||
: GenericDialogController(pParent, u"modules/dbreport/ui/floatingsort.ui"_ustr, u"FloatingSort"_ustr)
|
||||
, OPropertyChangeListener(m_aMutex)
|
||||
, OPropertyChangeListener()
|
||||
, m_pController(pController)
|
||||
, m_xGroups(m_pController->getReportDefinition()->getGroups())
|
||||
, m_bReadOnly(bReadOnly)
|
||||
|
|
|
@ -202,7 +202,7 @@ public:
|
|||
};
|
||||
|
||||
NavigatorTree::NavigatorTree(std::unique_ptr<weld::TreeView> xTreeView, OReportController& rController)
|
||||
: OPropertyChangeListener(m_aMutex)
|
||||
: OPropertyChangeListener()
|
||||
, m_xTreeView(std::move(xTreeView))
|
||||
, m_rController(rController)
|
||||
{
|
||||
|
@ -672,7 +672,7 @@ void NavigatorTree::removeEntry(const weld::TreeIter& rEntry, bool bRemove)
|
|||
}
|
||||
|
||||
NavigatorTree::UserData::UserData(NavigatorTree* pTree,uno::Reference<uno::XInterface> xContent)
|
||||
: OPropertyChangeListener(m_aMutex)
|
||||
: OPropertyChangeListener()
|
||||
, OContainerListener(m_aMutex)
|
||||
, m_xContent(std::move(xContent))
|
||||
, m_pTree(pTree)
|
||||
|
|
|
@ -73,7 +73,7 @@ static Color lcl_getOverlappedControlColor(/*const uno::Reference <lang::XMultiS
|
|||
|
||||
OReportSection::OReportSection(OSectionWindow* _pParent,uno::Reference< report::XSection > _xSection)
|
||||
: Window(_pParent,WB_DIALOGCONTROL)
|
||||
, ::comphelper::OPropertyChangeListener(m_aMutex)
|
||||
, ::comphelper::OPropertyChangeListener()
|
||||
, DropTargetHelper(this)
|
||||
, m_pPage(nullptr)
|
||||
, m_pView(nullptr)
|
||||
|
|
|
@ -47,7 +47,7 @@ using namespace ::comphelper;
|
|||
|
||||
OReportWindow::OReportWindow(OScrollWindowHelper* _pParent,ODesignView* _pView)
|
||||
: Window(_pParent,WB_DIALOGCONTROL)
|
||||
, ::comphelper::OPropertyChangeListener(m_aMutex)
|
||||
, ::comphelper::OPropertyChangeListener()
|
||||
,m_aHRuler(VclPtr<Ruler>::Create(this))
|
||||
,m_pView(_pView)
|
||||
,m_pParent(_pParent)
|
||||
|
|
|
@ -44,7 +44,7 @@ static void lcl_setScrollBar(sal_Int32 _nNewValue,const Point& _aPos,const Size&
|
|||
|
||||
OScrollWindowHelper::OScrollWindowHelper( ODesignView* _pDesignView)
|
||||
: OScrollWindowHelper_BASE( _pDesignView,WB_DIALOGCONTROL)
|
||||
,OPropertyChangeListener(m_aMutex)
|
||||
,OPropertyChangeListener()
|
||||
,m_aHScroll( VclPtr<ScrollAdaptor>::Create(this, true) )
|
||||
,m_aVScroll( VclPtr<ScrollAdaptor>::Create(this, false) )
|
||||
,m_pParent(_pDesignView)
|
||||
|
|
|
@ -41,7 +41,7 @@ using namespace ::comphelper;
|
|||
|
||||
OSectionWindow::OSectionWindow( OViewsWindow* _pParent,const uno::Reference< report::XSection >& _xSection,const OUString& _sColorEntry)
|
||||
: Window( _pParent,WB_DIALOGCONTROL)
|
||||
,OPropertyChangeListener(m_aMutex)
|
||||
,OPropertyChangeListener()
|
||||
,m_pParent(_pParent)
|
||||
,m_aStartMarker( VclPtr<rptui::OStartMarker>::Create(this,_sColorEntry))
|
||||
,m_aReportSection( VclPtr<rptui::OReportSection>::Create(this,_xSection))
|
||||
|
|
|
@ -519,7 +519,7 @@ void DbGridColumn::ImplInitWindow( vcl::Window const & rParent, const InitWindow
|
|||
|
||||
|
||||
DbCellControl::DbCellControl( DbGridColumn& _rColumn )
|
||||
:OPropertyChangeListener(m_aMutex)
|
||||
:OPropertyChangeListener()
|
||||
,m_bTransparent( false )
|
||||
,m_bAlignedController( true )
|
||||
,m_bAccessingValueProperty( false )
|
||||
|
|
|
@ -143,7 +143,7 @@ public:
|
|||
};
|
||||
|
||||
GridFieldValueListener::GridFieldValueListener(DbGridControl& _rParent, const Reference< XPropertySet >& _rField, sal_uInt16 _nId)
|
||||
:OPropertyChangeListener(m_aMutex)
|
||||
:OPropertyChangeListener()
|
||||
,m_rParent(_rParent)
|
||||
,m_nId(_nId)
|
||||
,m_nSuspended(0)
|
||||
|
@ -254,7 +254,7 @@ public:
|
|||
};
|
||||
|
||||
FmXGridSourcePropListener::FmXGridSourcePropListener(DbGridControl* _pParent)
|
||||
:OPropertyChangeListener(m_aMutex)
|
||||
:OPropertyChangeListener()
|
||||
,m_pParent(_pParent)
|
||||
,m_nSuspended(0)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue