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:
Noel Grandin 2024-09-09 10:50:07 +02:00
parent 07db236244
commit f9ff22db05
15 changed files with 38 additions and 26 deletions

View file

@ -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;
}

View file

@ -82,7 +82,7 @@ namespace pcr
SubmissionPropertyHandler::SubmissionPropertyHandler( const Reference< XComponentContext >& _rxContext )
:PropertyHandlerComponent( _rxContext )
,OPropertyChangeListener( m_aMutex )
,OPropertyChangeListener()
{
}

View file

@ -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()

View file

@ -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 )

View file

@ -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 )

View file

@ -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

View file

@ -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))

View file

@ -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)

View file

@ -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)

View file

@ -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)

View file

@ -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)

View file

@ -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)

View file

@ -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))

View file

@ -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 )

View file

@ -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)
{