[Libreoffice-commits] core.git: svl/source
Stephan Bergmann
sbergman at redhat.com
Tue Aug 29 16:38:04 UTC 2017
svl/source/config/itemholder2.cxx | 23 ++++++++---------------
svl/source/config/itemholder2.hxx | 1 -
2 files changed, 8 insertions(+), 16 deletions(-)
New commits:
commit 9b3813cdbf79366379a783596e5223624a03a5d4
Author: Stephan Bergmann <sbergman at redhat.com>
Date: Tue Aug 29 18:31:54 2017 +0200
Avoid "ThreadSanitizer: lock-order-inversion (potential deadlock)"
...during CppunitTest_drawinglayer_border:
> WARNING: ThreadSanitizer: lock-order-inversion (potential deadlock) (pid=3780)
> Cycle in lock order graph: M1066643978230284960 (0x000000000000) => M1071992002787787328 (0x000000000000) => M1066643978230284960
>
> Mutex M1071992002787787328 acquired here while holding mutex M1066643978230284960 in main thread:
> #0 pthread_mutex_lock compiler-rt/lib/tsan/../sanitizer_common/sanitizer_common_interceptors.inc:3800 (cppunittester+0x45abd7)
> #1 osl_acquireMutex sal/osl/unx/mutex.cxx:97 (libuno_sal.so.3+0xc1f0a)
> #2 osl::Mutex::acquire() include/osl/mutex.hxx:56 (libsvllo.so+0xecc78)
> #3 ClearableGuard include/osl/mutex.hxx:163 (libsvllo.so+0x10409f)
> #4 ResettableGuard include/osl/mutex.hxx:208 (libsvllo.so+0xfe61c)
> #5 ItemHolder2::impl_addItem(EItem) svl/source/config/itemholder2.cxx:80 (libsvllo.so+0xfd5ae)
> #6 ItemHolder2::holdConfigItem(EItem) svl/source/config/itemholder2.cxx:70 (libsvllo.so+0xfd4bf)
> #7 SvtCTLOptions svl/source/config/ctloptions.cxx:357 (libsvllo.so+0xf9308)
> #8 drawinglayer::detail::getDigitLanguage() drawinglayer/source/processor2d/getdigitlanguage.cxx:20 (libdrawinglayerlo.so+0x20882b)
> #9 VclProcessor2D drawinglayer/source/processor2d/vclprocessor2d.cxx:1434 (libdrawinglayerlo.so+0x248ed3)
> #10 VclPixelProcessor2D drawinglayer/source/processor2d/vclpixelprocessor2d.cxx:77 (libdrawinglayerlo.so+0x239f5c)
> #11 drawinglayer::processor2d::createBaseProcessor2DFromOutputDevice(OutputDevice&, drawinglayer::geometry::ViewInformation2D const&) drawinglayer/source/processor2d/processorfromoutputdevice.cxx:51 (libdrawinglayerlo.so+0x20f366)
> #12 (anonymous namespace)::DrawinglayerBorderTest::testDoublePixelProcessing() drawinglayer/qa/unit/border.cxx:98 (libtest_drawinglayer_border.so+0x9a05)
> #13 void std::__invoke_impl<void, void ((anonymous namespace)::DrawinglayerBorderTest::* const&)(), (anonymous namespace)::DrawinglayerBorderTest*&>(std::__invoke_memfun_deref, void ((anonymous namespace)::DrawinglayerBorderTest::* const&)(), (anonymous namespace)::DrawinglayerBorderTest*&) /usr/lib/gcc/x86_64-redhat-linux/6.4.1/../../../../include/c++/6.4.1/functional:227 (libtest_drawinglayer_border.so+0xc01e)
> #14 std::result_of<void ((anonymous namespace)::DrawinglayerBorderTest::* const&((anonymous namespace)::DrawinglayerBorderTest*&))()>::type std::__invoke<void ((anonymous namespace)::DrawinglayerBorderTest::* const&)(), (anonymous namespace)::DrawinglayerBorderTest*&>(void ((anonymous namespace)::DrawinglayerBorderTest::* const&)(), (anonymous namespace)::DrawinglayerBorderTest*&) /usr/lib/gcc/x86_64-redhat-linux/6.4.1/../../../../include/c++/6.4.1/functional:250 (libtest_drawinglayer_border.so+0xbf0d)
> #15 _ZNKSt12_Mem_fn_baseIMN12_GLOBAL__N_122DrawinglayerBorderTestEFvvELb1EEclIJRPS1_EEEDTclsr3stdE8__invokedtdefpT6_M_pmfspclsr3stdE7forwardIT_Efp_EEEDpOS8_ /usr/lib/gcc/x86_64-redhat-linux/6.4.1/../../../../include/c++/6.4.1/functional:604 (libtest_drawinglayer_border.so+0xbdeb)
> #16 void std::_Bind<std::_Mem_fn<void ((anonymous namespace)::DrawinglayerBorderTest::*)()> ((anonymous namespace)::DrawinglayerBorderTest*)>::__call<void, , 0ul>(std::tuple<>&&, std::_Index_tuple<0ul>) /usr/lib/gcc/x86_64-redhat-linux/6.4.1/../../../../include/c++/6.4.1/functional:933 (libtest_drawinglayer_border.so+0xbd5b)
> #17 void std::_Bind<std::_Mem_fn<void ((anonymous namespace)::DrawinglayerBorderTest::*)()> ((anonymous namespace)::DrawinglayerBorderTest*)>::operator()<, void>() /usr/lib/gcc/x86_64-redhat-linux/6.4.1/../../../../include/c++/6.4.1/functional:991 (libtest_drawinglayer_border.so+0xbc66)
> #18 std::_Function_handler<void (), std::_Bind<std::_Mem_fn<void ((anonymous namespace)::DrawinglayerBorderTest::*)()> ((anonymous namespace)::DrawinglayerBorderTest*)> >::_M_invoke(std::_Any_data const&) /usr/lib/gcc/x86_64-redhat-linux/6.4.1/../../../../include/c++/6.4.1/functional:1731 (libtest_drawinglayer_border.so+0xb62a)
> #19 std::function<void ()>::operator()() const /usr/lib/gcc/x86_64-redhat-linux/6.4.1/../../../../include/c++/6.4.1/functional:2127 (libtest_drawinglayer_border.so+0x12efe)
> #20 CppUnit::TestCaller<(anonymous namespace)::DrawinglayerBorderTest>::runTest() workdir/UnpackedTarball/cppunit/include/cppunit/TestCaller.h:175 (libtest_drawinglayer_border.so+0xadcc)
> #21 CppUnit::TestCaseMethodFunctor::operator()() const workdir/UnpackedTarball/cppunit/src/cppunit/TestCase.cpp:32 (libcppunit-1.14.so.0+0xd61d2)
> #22 (anonymous namespace)::Protector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) test/source/vclbootstrapprotector.cxx:39 (libvclbootstrapprotector.so+0x1114)
> #23 CppUnit::ProtectorChain::ProtectFunctor::operator()() const workdir/UnpackedTarball/cppunit/src/cppunit/ProtectorChain.cpp:20 (libcppunit-1.14.so.0+0xc7614)
> #24 (anonymous namespace)::Prot::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) unotest/source/cpp/unobootstrapprotector/unobootstrapprotector.cxx:89 (unobootstrapprotector.so+0x2204)
> #25 CppUnit::ProtectorChain::ProtectFunctor::operator()() const workdir/UnpackedTarball/cppunit/src/cppunit/ProtectorChain.cpp:20 (libcppunit-1.14.so.0+0xc7614)
> #26 (anonymous namespace)::Prot::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) unotest/source/cpp/unoexceptionprotector/unoexceptionprotector.cxx:63 (unoexceptionprotector.so+0x23e9)
> #27 CppUnit::ProtectorChain::ProtectFunctor::operator()() const workdir/UnpackedTarball/cppunit/src/cppunit/ProtectorChain.cpp:20 (libcppunit-1.14.so.0+0xc7614)
> #28 CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) workdir/UnpackedTarball/cppunit/src/cppunit/DefaultProtector.cpp:15 (libcppunit-1.14.so.0+0xa57ad)
> #29 CppUnit::ProtectorChain::ProtectFunctor::operator()() const workdir/UnpackedTarball/cppunit/src/cppunit/ProtectorChain.cpp:20 (libcppunit-1.14.so.0+0xc7614)
> #30 CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) workdir/UnpackedTarball/cppunit/src/cppunit/ProtectorChain.cpp:86 (libcppunit-1.14.so.0+0xc4a96)
> #31 CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) workdir/UnpackedTarball/cppunit/src/cppunit/TestResult.cpp:182 (libcppunit-1.14.so.0+0xf4714)
> #32 CppUnit::TestCase::run(CppUnit::TestResult*) workdir/UnpackedTarball/cppunit/src/cppunit/TestCase.cpp:91 (libcppunit-1.14.so.0+0xd5750)
> #33 CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) workdir/UnpackedTarball/cppunit/src/cppunit/TestComposite.cpp:64 (libcppunit-1.14.so.0+0xd6d5a)
> #34 CppUnit::TestComposite::run(CppUnit::TestResult*) workdir/UnpackedTarball/cppunit/src/cppunit/TestComposite.cpp:23 (libcppunit-1.14.so.0+0xd6a2e)
> #35 CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) workdir/UnpackedTarball/cppunit/src/cppunit/TestComposite.cpp:64 (libcppunit-1.14.so.0+0xd6d5a)
> #36 CppUnit::TestComposite::run(CppUnit::TestResult*) workdir/UnpackedTarball/cppunit/src/cppunit/TestComposite.cpp:23 (libcppunit-1.14.so.0+0xd6a2e)
> #37 CppUnit::TestRunner::WrappingSuite::run(CppUnit::TestResult*) workdir/UnpackedTarball/cppunit/src/cppunit/TestRunner.cpp:47 (libcppunit-1.14.so.0+0x10282c)
> #38 CppUnit::TestResult::runTest(CppUnit::Test*) workdir/UnpackedTarball/cppunit/src/cppunit/TestResult.cpp:149 (libcppunit-1.14.so.0+0xf4223)
> #39 CppUnit::TestRunner::run(CppUnit::TestResult&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) workdir/UnpackedTarball/cppunit/src/cppunit/TestRunner.cpp:96 (libcppunit-1.14.so.0+0x102c76)
> #40 (anonymous namespace)::ProtectedFixtureFunctor::run() const sal/cppunittester/cppunittester.cxx:316 (cppunittester+0x4bd1e8)
> #41 sal_main() sal/cppunittester/cppunittester.cxx:466 (cppunittester+0x4bbe1e)
> #42 main sal/cppunittester/cppunittester.cxx:373 (cppunittester+0x4bb695)
>
> Mutex M1066643978230284960 previously acquired by the same thread here:
> #0 pthread_mutex_lock compiler-rt/lib/tsan/../sanitizer_common/sanitizer_common_interceptors.inc:3800 (cppunittester+0x45abd7)
> #1 osl_acquireMutex sal/osl/unx/mutex.cxx:97 (libuno_sal.so.3+0xc1f0a)
> #2 osl::Mutex::acquire() include/osl/mutex.hxx:56 (libsvllo.so+0xecc78)
> #3 Guard include/osl/mutex.hxx:129 (libsvllo.so+0xf38ef)
> #4 SvtCTLOptions svl/source/config/ctloptions.cxx:350 (libsvllo.so+0xf9224)
> #5 drawinglayer::detail::getDigitLanguage() drawinglayer/source/processor2d/getdigitlanguage.cxx:20 (libdrawinglayerlo.so+0x20882b)
> #6 VclProcessor2D drawinglayer/source/processor2d/vclprocessor2d.cxx:1434 (libdrawinglayerlo.so+0x248ed3)
> #7 VclPixelProcessor2D drawinglayer/source/processor2d/vclpixelprocessor2d.cxx:77 (libdrawinglayerlo.so+0x239f5c)
> #8 drawinglayer::processor2d::createBaseProcessor2DFromOutputDevice(OutputDevice&, drawinglayer::geometry::ViewInformation2D const&) drawinglayer/source/processor2d/processorfromoutputdevice.cxx:51 (libdrawinglayerlo.so+0x20f366)
> #9 (anonymous namespace)::DrawinglayerBorderTest::testDoublePixelProcessing() drawinglayer/qa/unit/border.cxx:98 (libtest_drawinglayer_border.so+0x9a05)
> #10 void std::__invoke_impl<void, void ((anonymous namespace)::DrawinglayerBorderTest::* const&)(), (anonymous namespace)::DrawinglayerBorderTest*&>(std::__invoke_memfun_deref, void ((anonymous namespace)::DrawinglayerBorderTest::* const&)(), (anonymous namespace)::DrawinglayerBorderTest*&) /usr/lib/gcc/x86_64-redhat-linux/6.4.1/../../../../include/c++/6.4.1/functional:227 (libtest_drawinglayer_border.so+0xc01e)
> #11 std::result_of<void ((anonymous namespace)::DrawinglayerBorderTest::* const&((anonymous namespace)::DrawinglayerBorderTest*&))()>::type std::__invoke<void ((anonymous namespace)::DrawinglayerBorderTest::* const&)(), (anonymous namespace)::DrawinglayerBorderTest*&>(void ((anonymous namespace)::DrawinglayerBorderTest::* const&)(), (anonymous namespace)::DrawinglayerBorderTest*&) /usr/lib/gcc/x86_64-redhat-linux/6.4.1/../../../../include/c++/6.4.1/functional:250 (libtest_drawinglayer_border.so+0xbf0d)
> #12 _ZNKSt12_Mem_fn_baseIMN12_GLOBAL__N_122DrawinglayerBorderTestEFvvELb1EEclIJRPS1_EEEDTclsr3stdE8__invokedtdefpT6_M_pmfspclsr3stdE7forwardIT_Efp_EEEDpOS8_ /usr/lib/gcc/x86_64-redhat-linux/6.4.1/../../../../include/c++/6.4.1/functional:604 (libtest_drawinglayer_border.so+0xbdeb)
> #13 void std::_Bind<std::_Mem_fn<void ((anonymous namespace)::DrawinglayerBorderTest::*)()> ((anonymous namespace)::DrawinglayerBorderTest*)>::__call<void, , 0ul>(std::tuple<>&&, std::_Index_tuple<0ul>) /usr/lib/gcc/x86_64-redhat-linux/6.4.1/../../../../include/c++/6.4.1/functional:933 (libtest_drawinglayer_border.so+0xbd5b)
> #14 void std::_Bind<std::_Mem_fn<void ((anonymous namespace)::DrawinglayerBorderTest::*)()> ((anonymous namespace)::DrawinglayerBorderTest*)>::operator()<, void>() /usr/lib/gcc/x86_64-redhat-linux/6.4.1/../../../../include/c++/6.4.1/functional:991 (libtest_drawinglayer_border.so+0xbc66)
> #15 std::_Function_handler<void (), std::_Bind<std::_Mem_fn<void ((anonymous namespace)::DrawinglayerBorderTest::*)()> ((anonymous namespace)::DrawinglayerBorderTest*)> >::_M_invoke(std::_Any_data const&) /usr/lib/gcc/x86_64-redhat-linux/6.4.1/../../../../include/c++/6.4.1/functional:1731 (libtest_drawinglayer_border.so+0xb62a)
> #16 std::function<void ()>::operator()() const /usr/lib/gcc/x86_64-redhat-linux/6.4.1/../../../../include/c++/6.4.1/functional:2127 (libtest_drawinglayer_border.so+0x12efe)
> #17 CppUnit::TestCaller<(anonymous namespace)::DrawinglayerBorderTest>::runTest() workdir/UnpackedTarball/cppunit/include/cppunit/TestCaller.h:175 (libtest_drawinglayer_border.so+0xadcc)
> #18 CppUnit::TestCaseMethodFunctor::operator()() const workdir/UnpackedTarball/cppunit/src/cppunit/TestCase.cpp:32 (libcppunit-1.14.so.0+0xd61d2)
> #19 (anonymous namespace)::Protector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) test/source/vclbootstrapprotector.cxx:39 (libvclbootstrapprotector.so+0x1114)
> #20 CppUnit::ProtectorChain::ProtectFunctor::operator()() const workdir/UnpackedTarball/cppunit/src/cppunit/ProtectorChain.cpp:20 (libcppunit-1.14.so.0+0xc7614)
> #21 (anonymous namespace)::Prot::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) unotest/source/cpp/unobootstrapprotector/unobootstrapprotector.cxx:89 (unobootstrapprotector.so+0x2204)
> #22 CppUnit::ProtectorChain::ProtectFunctor::operator()() const workdir/UnpackedTarball/cppunit/src/cppunit/ProtectorChain.cpp:20 (libcppunit-1.14.so.0+0xc7614)
> #23 (anonymous namespace)::Prot::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) unotest/source/cpp/unoexceptionprotector/unoexceptionprotector.cxx:63 (unoexceptionprotector.so+0x23e9)
> #24 CppUnit::ProtectorChain::ProtectFunctor::operator()() const workdir/UnpackedTarball/cppunit/src/cppunit/ProtectorChain.cpp:20 (libcppunit-1.14.so.0+0xc7614)
> #25 CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) workdir/UnpackedTarball/cppunit/src/cppunit/DefaultProtector.cpp:15 (libcppunit-1.14.so.0+0xa57ad)
> #26 CppUnit::ProtectorChain::ProtectFunctor::operator()() const workdir/UnpackedTarball/cppunit/src/cppunit/ProtectorChain.cpp:20 (libcppunit-1.14.so.0+0xc7614)
> #27 CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) workdir/UnpackedTarball/cppunit/src/cppunit/ProtectorChain.cpp:86 (libcppunit-1.14.so.0+0xc4a96)
> #28 CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) workdir/UnpackedTarball/cppunit/src/cppunit/TestResult.cpp:182 (libcppunit-1.14.so.0+0xf4714)
> #29 CppUnit::TestCase::run(CppUnit::TestResult*) workdir/UnpackedTarball/cppunit/src/cppunit/TestCase.cpp:91 (libcppunit-1.14.so.0+0xd5750)
> #30 CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) workdir/UnpackedTarball/cppunit/src/cppunit/TestComposite.cpp:64 (libcppunit-1.14.so.0+0xd6d5a)
> #31 CppUnit::TestComposite::run(CppUnit::TestResult*) workdir/UnpackedTarball/cppunit/src/cppunit/TestComposite.cpp:23 (libcppunit-1.14.so.0+0xd6a2e)
> #32 CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) workdir/UnpackedTarball/cppunit/src/cppunit/TestComposite.cpp:64 (libcppunit-1.14.so.0+0xd6d5a)
> #33 CppUnit::TestComposite::run(CppUnit::TestResult*) workdir/UnpackedTarball/cppunit/src/cppunit/TestComposite.cpp:23 (libcppunit-1.14.so.0+0xd6a2e)
> #34 CppUnit::TestRunner::WrappingSuite::run(CppUnit::TestResult*) workdir/UnpackedTarball/cppunit/src/cppunit/TestRunner.cpp:47 (libcppunit-1.14.so.0+0x10282c)
> #35 CppUnit::TestResult::runTest(CppUnit::Test*) workdir/UnpackedTarball/cppunit/src/cppunit/TestResult.cpp:149 (libcppunit-1.14.so.0+0xf4223)
> #36 CppUnit::TestRunner::run(CppUnit::TestResult&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) workdir/UnpackedTarball/cppunit/src/cppunit/TestRunner.cpp:96 (libcppunit-1.14.so.0+0x102c76)
> #37 (anonymous namespace)::ProtectedFixtureFunctor::run() const sal/cppunittester/cppunittester.cxx:316 (cppunittester+0x4bd1e8)
> #38 sal_main() sal/cppunittester/cppunittester.cxx:466 (cppunittester+0x4bbe1e)
> #39 main sal/cppunittester/cppunittester.cxx:373 (cppunittester+0x4bb695)
>
> Mutex M1066643978230284960 acquired here while holding mutex M1071992002787787328 in main thread:
> #0 pthread_mutex_lock compiler-rt/lib/tsan/../sanitizer_common/sanitizer_common_interceptors.inc:3800 (cppunittester+0x45abd7)
> #1 osl_acquireMutex sal/osl/unx/mutex.cxx:97 (libuno_sal.so.3+0xc1f0a)
> #2 osl::Mutex::acquire() include/osl/mutex.hxx:56 (libsvllo.so+0xecc78)
> #3 Guard include/osl/mutex.hxx:129 (libsvllo.so+0xf38ef)
> #4 ~SvtCTLOptions svl/source/config/ctloptions.cxx:370 (libsvllo.so+0xf95df)
> #5 ~SvtCTLOptions svl/source/config/ctloptions.cxx:368 (libsvllo.so+0xf971c)
> #6 ItemHolder2::impl_deleteItem(TItemInfo&) svl/source/config/itemholder2.cxx:136 (libsvllo.so+0xfdb69)
> #7 ItemHolder2::impl_releaseAllItems() svl/source/config/itemholder2.cxx:109 (libsvllo.so+0xfd2b9)
> #8 ItemHolder2::disposing(com::sun::star::lang::EventObject const&) svl/source/config/itemholder2.cxx:75 (libsvllo.so+0xfd834)
> #9 non-virtual thunk to ItemHolder2::disposing(com::sun::star::lang::EventObject const&) :? (libsvllo.so+0xfd89c)
> #10 cppu::OInterfaceContainerHelper::disposeAndClear(com::sun::star::lang::EventObject const&) cppuhelper/source/interfacecontainer.cxx:300 (libuno_cppuhelpergcc3.so.3+0xba149)
> #11 cppu::OMultiTypeInterfaceContainerHelper::disposeAndClear(com::sun::star::lang::EventObject const&) cppuhelper/source/interfacecontainer.cxx:472 (libuno_cppuhelpergcc3.so.3+0xbb6a5)
> #12 cppu::WeakComponentImplHelperBase::dispose() cppuhelper/source/implbase.cxx:101 (libuno_cppuhelpergcc3.so.3+0xb0de8)
> #13 cppu::PartialWeakComponentImplHelper<com::sun::star::lang::XServiceInfo, com::sun::star::lang::XMultiServiceFactory, com::sun::star::util::XRefreshable, com::sun::star::util::XFlushable, com::sun::star::lang::XLocalizable>::dispose() include/cppuhelper/compbase.hxx:93 (libconfigmgrlo.so+0x116708)
> #14 non-virtual thunk to cppu::PartialWeakComponentImplHelper<com::sun::star::lang::XServiceInfo, com::sun::star::lang::XMultiServiceFactory, com::sun::star::util::XRefreshable, com::sun::star::util::XFlushable, com::sun::star::lang::XLocalizable>::dispose() include/cppuhelper/compbase.hxx:? (libconfigmgrlo.so+0x116a0c)
> #15 cppu::ComponentContext::disposing() cppuhelper/source/component_context.cxx:451 (libuno_cppuhelpergcc3.so.3+0x5cdc0)
> #16 cppu::WeakComponentImplHelperBase::dispose() cppuhelper/source/implbase.cxx:102 (libuno_cppuhelpergcc3.so.3+0xb0e09)
> #17 cppu::PartialWeakComponentImplHelper<com::sun::star::uno::XComponentContext, com::sun::star::container::XNameContainer>::dispose() include/cppuhelper/compbase.hxx:93 (libuno_cppuhelpergcc3.so.3+0x65a88)
> #18 non-virtual thunk to cppu::PartialWeakComponentImplHelper<com::sun::star::uno::XComponentContext, com::sun::star::container::XNameContainer>::dispose() include/cppuhelper/compbase.hxx:? (libuno_cppuhelpergcc3.so.3+0x65d8c)
> #19 (anonymous namespace)::Hook::deinitHook((anonymous namespace)::Hook*, LinkParamNone*) test/source/setupvcl.cxx:53 (libtest-setupvcl.so+0x2aa0)
> #20 (anonymous namespace)::Hook::LinkStubdeinitHook(void*, LinkParamNone*) test/source/setupvcl.cxx:37 (libtest-setupvcl.so+0x27f8)
> #21 Link<LinkParamNone*, void>::Call(LinkParamNone*) const include/tools/link.hxx:84 (libvcllo.so+0x983870)
> #22 DeInitVCL() vcl/source/app/svmain.cxx:519 (libvcllo.so+0x10db246)
> #23 ~Protector test/source/vclbootstrapprotector.cxx:31 (libvclbootstrapprotector.so+0x100a)
> #24 ~Protector test/source/vclbootstrapprotector.cxx:30 (libvclbootstrapprotector.so+0x109c)
> #25 CppUnit::ProtectorChain::pop() workdir/UnpackedTarball/cppunit/src/cppunit/ProtectorChain.cpp:56 (libcppunit-1.14.so.0+0xc46cb)
> #26 CppUnit::TestResult::popProtector() workdir/UnpackedTarball/cppunit/src/cppunit/TestResult.cpp:196 (libcppunit-1.14.so.0+0xf4873)
> #27 (anonymous namespace)::ProtectedFixtureFunctor::run() const sal/cppunittester/cppunittester.cxx:325 (cppunittester+0x4bd3df)
> #28 sal_main() sal/cppunittester/cppunittester.cxx:466 (cppunittester+0x4bbe1e)
> #29 main sal/cppunittester/cppunittester.cxx:373 (cppunittester+0x4bb695)
>
> Mutex M1071992002787787328 previously acquired by the same thread here:
> #0 pthread_mutex_lock compiler-rt/lib/tsan/../sanitizer_common/sanitizer_common_interceptors.inc:3800 (cppunittester+0x45abd7)
> #1 osl_acquireMutex sal/osl/unx/mutex.cxx:97 (libuno_sal.so.3+0xc1f0a)
> #2 osl::Mutex::acquire() include/osl/mutex.hxx:56 (libsvllo.so+0xecc78)
> #3 ClearableGuard include/osl/mutex.hxx:163 (libsvllo.so+0x10409f)
> #4 ResettableGuard include/osl/mutex.hxx:208 (libsvllo.so+0xfe61c)
> #5 ItemHolder2::impl_releaseAllItems() svl/source/config/itemholder2.cxx:101 (libsvllo.so+0xfd20c)
> #6 ItemHolder2::disposing(com::sun::star::lang::EventObject const&) svl/source/config/itemholder2.cxx:75 (libsvllo.so+0xfd834)
> #7 non-virtual thunk to ItemHolder2::disposing(com::sun::star::lang::EventObject const&) :? (libsvllo.so+0xfd89c)
> #8 cppu::OInterfaceContainerHelper::disposeAndClear(com::sun::star::lang::EventObject const&) cppuhelper/source/interfacecontainer.cxx:300 (libuno_cppuhelpergcc3.so.3+0xba149)
> #9 cppu::OMultiTypeInterfaceContainerHelper::disposeAndClear(com::sun::star::lang::EventObject const&) cppuhelper/source/interfacecontainer.cxx:472 (libuno_cppuhelpergcc3.so.3+0xbb6a5)
> #10 cppu::WeakComponentImplHelperBase::dispose() cppuhelper/source/implbase.cxx:101 (libuno_cppuhelpergcc3.so.3+0xb0de8)
> #11 cppu::PartialWeakComponentImplHelper<com::sun::star::lang::XServiceInfo, com::sun::star::lang::XMultiServiceFactory, com::sun::star::util::XRefreshable, com::sun::star::util::XFlushable, com::sun::star::lang::XLocalizable>::dispose() include/cppuhelper/compbase.hxx:93 (libconfigmgrlo.so+0x116708)
> #12 non-virtual thunk to cppu::PartialWeakComponentImplHelper<com::sun::star::lang::XServiceInfo, com::sun::star::lang::XMultiServiceFactory, com::sun::star::util::XRefreshable, com::sun::star::util::XFlushable, com::sun::star::lang::XLocalizable>::dispose() :? (libconfigmgrlo.so+0x116a0c)
> #13 cppu::ComponentContext::disposing() cppuhelper/source/component_context.cxx:451 (libuno_cppuhelpergcc3.so.3+0x5cdc0)
> #14 cppu::WeakComponentImplHelperBase::dispose() cppuhelper/source/implbase.cxx:102 (libuno_cppuhelpergcc3.so.3+0xb0e09)
> #15 cppu::PartialWeakComponentImplHelper<com::sun::star::uno::XComponentContext, com::sun::star::container::XNameContainer>::dispose() include/cppuhelper/compbase.hxx:93 (libuno_cppuhelpergcc3.so.3+0x65a88)
> #16 non-virtual thunk to cppu::PartialWeakComponentImplHelper<com::sun::star::uno::XComponentContext, com::sun::star::container::XNameContainer>::dispose() :? (libuno_cppuhelpergcc3.so.3+0x65d8c)
> #17 (anonymous namespace)::Hook::deinitHook((anonymous namespace)::Hook*, LinkParamNone*) test/source/setupvcl.cxx:53 (libtest-setupvcl.so+0x2aa0)
> #18 (anonymous namespace)::Hook::LinkStubdeinitHook(void*, LinkParamNone*) test/source/setupvcl.cxx:37 (libtest-setupvcl.so+0x27f8)
> #19 Link<LinkParamNone*, void>::Call(LinkParamNone*) const include/tools/link.hxx:84 (libvcllo.so+0x983870)
> #20 DeInitVCL() vcl/source/app/svmain.cxx:519 (libvcllo.so+0x10db246)
> #21 ~Protector test/source/vclbootstrapprotector.cxx:31 (libvclbootstrapprotector.so+0x100a)
> #22 ~Protector test/source/vclbootstrapprotector.cxx:30 (libvclbootstrapprotector.so+0x109c)
> #23 CppUnit::ProtectorChain::pop() workdir/UnpackedTarball/cppunit/src/cppunit/ProtectorChain.cpp:56 (libcppunit-1.14.so.0+0xc46cb)
> #24 CppUnit::TestResult::popProtector() workdir/UnpackedTarball/cppunit/src/cppunit/TestResult.cpp:196 (libcppunit-1.14.so.0+0xf4873)
> #25 (anonymous namespace)::ProtectedFixtureFunctor::run() const sal/cppunittester/cppunittester.cxx:325 (cppunittester+0x4bd3df)
> #26 sal_main() sal/cppunittester/cppunittester.cxx:466 (cppunittester+0x4bbe1e)
> #27 main sal/cppunittester/cppunittester.cxx:373 (cppunittester+0x4bb695)
Change-Id: I9564fc918438a265629ef227bdd97e42ca1756f2
diff --git a/svl/source/config/itemholder2.cxx b/svl/source/config/itemholder2.cxx
index c7ab2bfb4b26..1511b47082a3 100644
--- a/svl/source/config/itemholder2.cxx
+++ b/svl/source/config/itemholder2.cxx
@@ -98,17 +98,19 @@ void ItemHolder2::impl_addItem(EItem eItem)
void ItemHolder2::impl_releaseAllItems()
{
- ::osl::ResettableMutexGuard aLock(m_aLock);
+ TItems items;
+ {
+ ::osl::MutexGuard aLock(m_aLock);
+ items.swap(m_lItems);
+ }
TItems::iterator pIt;
- for ( pIt = m_lItems.begin();
- pIt != m_lItems.end() ;
+ for ( pIt = items.begin();
+ pIt != items.end() ;
++pIt )
{
- TItemInfo& rInfo = *pIt;
- impl_deleteItem(rInfo);
+ delete pIt->pItem;
}
- m_lItems.clear();
}
void ItemHolder2::impl_newItem(TItemInfo& rItem)
@@ -129,13 +131,4 @@ void ItemHolder2::impl_newItem(TItemInfo& rItem)
}
}
-void ItemHolder2::impl_deleteItem(TItemInfo& rItem)
-{
- if (rItem.pItem)
- {
- delete rItem.pItem;
- rItem.pItem = nullptr;
- }
-}
-
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svl/source/config/itemholder2.hxx b/svl/source/config/itemholder2.hxx
index d0348ef6e0f5..3246cc37b4dd 100644
--- a/svl/source/config/itemholder2.hxx
+++ b/svl/source/config/itemholder2.hxx
@@ -50,7 +50,6 @@ class ItemHolder2 : private ItemHolderMutexBase
void impl_addItem(EItem eItem);
void impl_releaseAllItems();
static void impl_newItem(TItemInfo& rItem);
- static void impl_deleteItem(TItemInfo& rItem);
};
#endif // INCLUDED_SVTOOLS_ITEMHOLDER2_HXX_
More information about the Libreoffice-commits
mailing list