summaryrefslogtreecommitdiff
path: root/dbaccess
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2014-02-03 12:04:02 +0100
committerStephan Bergmann <sbergman@redhat.com>2014-02-03 16:05:09 +0100
commit775bf23fc6b314a1e1e6b4d4c34139a41d1fe690 (patch)
tree6be3b780c658ea13546f8ad511184cf261d0d7cc /dbaccess
parent70ba89711bebcbf53eec374829b090041f30c2cc (diff)
Prevent SolarMutex deadlock in unit test
Seen once a deadlock between d 12 (Thread 0x2af5a4c8a700 (LWP 7618)): > #0 0x00002af58ac97ddd in __lll_lock_wait () from /lib64/libpthread.so.0 > #1 0x00002af58ac93bbc in _L_lock_839 () from /lib64/libpthread.so.0 > #2 0x00002af58ac93ad9 in pthread_mutex_lock () from /lib64/libpthread.so.0 > #3 0x00002af589e2383a in osl_acquireMutex (pMutex=0x9329b0) at sal/osl/unx/mutex.c:104 > #4 0x00002af598d577ec in vcl::SolarMutexObject::acquire (this=0x8dd120) at vcl/source/app/solarmutex.cxx:35 > #5 0x00002af599305c82 in SalYieldMutex::acquire (this=0x8dd120) at vcl/generic/app/geninst.cxx:49 > #6 0x00002af59e9bfb7b in framework::LockHelper::acquireReadAccess (this=0x2af5a2406088) at framework/source/fwi/threadhelp/lockhelper.cxx:150 > #7 0x00002af59ca29ccf in framework::ReadGuard::lock (this=0x2af5a4c894c0) at framework/inc/threadhelp/readguard.hxx:113 > #8 0x00002af59ca29c81 in framework::ReadGuard::ReadGuard (this=0x2af5a4c894c0, rLock=...) at framework/inc/threadhelp/readguard.hxx:79 > #9 0x00002af59cb52fce in (anonymous namespace)::Frame::getContainerWindow (this=0x2af5a2406010) at framework/source/services/frame.cxx:985 > #10 0x00002af5a32582d2 in tdoc_ucp::OfficeDocumentsManager::isWithoutOrInTopLevelFrame (this=0x2af5a24a1f18, xModel=uno::Reference to (dbaccess::ODatabaseDocument *) 0x2af5a4edc5a8) at ucb/source/ucp/tdoc/tdoc_docmgr.cxx:626 > #11 0x00002af5a325870f in tdoc_ucp::OfficeDocumentsManager::isOfficeDocument (this=0x2af5a24a1f18, xDoc=uno::Reference to (dbaccess::ODatabaseDocument *) 0x2af5a4edc558) at ucb/source/ucp/tdoc/tdoc_docmgr.cxx:697 > #12 0x00002af5a325651e in tdoc_ucp::OfficeDocumentsManager::notifyEvent (this=0x2af5a24a1f18, Event=...) at ucb/source/ucp/tdoc/tdoc_docmgr.cxx:305 > #13 0x00002af594251195 in cppu::OInterfaceContainerHelper::NotifySingleListener<com::sun::star::document::XEventListener, com::sun::star::document::EventObject>::operator() (this=0x2af5a4c89b20, listener=uno::Reference to (tdoc_ucp::OfficeDocumentsManager *) 0x2af5a24a1f40) at include/cppuhelper/interfacecontainer.h:262 > #14 0x00002af59425023e in cppu::OInterfaceContainerHelper::forEach<com::sun::star::document::XEventListener, cppu::OInterfaceContainerHelper::NotifySingleListener<com::sun::star::document::XEventListener, com::sun::star::document::EventObject> > (this=0x2af5a24a36a0, func=...) at include/cppuhelper/interfacecontainer.h:276 > #15 0x00002af59424f4da in cppu::OInterfaceContainerHelper::notifyEach<com::sun::star::document::XEventListener, com::sun::star::document::EventObject> (this=0x2af5a24a36a0, NotificationMethod=&virtual com::sun::star::document::XEventListener::notifyEvent(com::sun::star::document::EventObject const&), Event=...) at include/cppuhelper/interfacecontainer.h:289 > #16 0x00002af59424d864 in (anonymous namespace)::SfxGlobalEvents_Impl::implts_notifyListener (this=0x2af5a24a3628, aEvent=...) at sfx2/source/notify/globalevents.cxx:505 > #17 0x00002af59424c543 in (anonymous namespace)::SfxGlobalEvents_Impl::documentEventOccured (this=0x2af5a24a3628, _Event=...) at sfx2/source/notify/globalevents.cxx:315 > #18 0x00002af59016a5a5 in cppu::OInterfaceContainerHelper::NotifySingleListener<com::sun::star::document::XDocumentEventListener, com::sun::star::document::DocumentEvent>::operator() (this=0x2af5a4c89c90, listener=uno::Reference to ((anonymous namespace)::SfxGlobalEvents_Impl *) 0x2af5a24a3678) at include/cppuhelper/interfacecontainer.h:262 > #19 0x00002af59016a35e in cppu::OInterfaceContainerHelper::forEach<com::sun::star::document::XDocumentEventListener, cppu::OInterfaceContainerHelper::NotifySingleListener<com::sun::star::document::XDocumentEventListener, com::sun::star::document::DocumentEvent> > (this=0x11c0378, func=...) at include/cppuhelper/interfacecontainer.h:276 > #20 0x00002af590169ed6 in cppu::OInterfaceContainerHelper::notifyEach<com::sun::star::document::XDocumentEventListener, com::sun::star::document::DocumentEvent> (this=0x11c0378, NotificationMethod=&virtual com::sun::star::document::XDocumentEventListener::documentEventOccured(com::sun::star::document::DocumentEvent const&), Event=...) at include/cppuhelper/interfacecontainer.h:289 > #21 0x00002af5901690ed in dbaccess::DocumentEventNotifier_Impl::impl_notifyEvent_nothrow (this=0x11c0330, _rEvent=...) at dbaccess/source/core/dataaccess/documenteventnotifier.cxx:200 > #22 0x00002af5901693fa in dbaccess::DocumentEventNotifier_Impl::processEvent (this=0x11c0330, _rEvent=...) at dbaccess/source/core/dataaccess/documenteventnotifier.cxx:231 > #23 0x00002af58cba5de9 in comphelper::AsyncEventNotifier::execute (this=0x128c4e0) at comphelper/source/misc/asyncnotification.cxx:221 > #24 0x00002af58bcfe9c4 in salhelper::Thread::run (this=0x128c4e0) at salhelper/source/thread.cxx:40 > #25 0x00002af58bcfed8d in osl::threadFunc (param=0x128c4f0) at include/osl/thread.hxx:187 > #26 0x00002af589e2e2e7 in osl_thread_start_Impl (pData=0x128db40) at sal/osl/unx/thread.c:236 > #27 0x00002af58ac91c53 in start_thread () from /lib64/libpthread.so.0 > #28 0x00002af58a9bedbd in clone () from /lib64/libc.so.6 and > Thread 1 (Thread 0x2af589931980 (LWP 7598)): > #0 0x00002af58ac95565 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0 > #1 0x00002af589e67146 in osl_waitCondition (Condition=0x11a22a0, pTimeout=0x0) at sal/osl/unx/conditn.cxx:275 > #2 0x00002af59e9c0866 in osl::Condition::wait (this=0x2af5a24060d0, pTimeout=0x0) at include/osl/conditn.hxx:82 > #3 0x00002af59e9c0bf5 in framework::Gate::wait (this=0x2af5a24060c0, pTimeOut=0x0) at framework/inc/threadhelp/gate.hxx:197 > #4 0x00002af59e9c0041 in framework::TransactionManager::setWorkingMode (this=0x2af5a24060b0, eMode=framework::E_BEFORECLOSE) at framework/source/fwi/threadhelp/transactionmanager.cxx:119 > #5 0x00002af59cb56c8f in (anonymous namespace)::Frame::dispose (this=0x2af5a2406010) at framework/source/services/frame.cxx:2229 > #6 0x00002af59cb55bec in (anonymous namespace)::Frame::close (this=0x2af5a2406010, bDeliverOwnership=0 '\000') at framework/source/services/frame.cxx:2002 > #7 0x00002af59010f9cc in dbaccess::ODatabaseDocument::impl_closeControllerFrames_nolck_throw (this=0x2af5a4edc538, _bDeliverOwnership=0 '\000') at dbaccess/source/core/dataaccess/databasedocument.cxx:1441 > #8 0x00002af59010fe24 in dbaccess::ODatabaseDocument::close (this=0x2af5a4edc538, _bDeliverOwnership=0 '\000') at dbaccess/source/core/dataaccess/databasedocument.cxx:1498 > #9 0x00002af58f6c59c6 in DialogSaveTest::test (this=0x922c10) at dbaccess/qa/extras/dialog-save.cxx:104 > #10 0x00002af58f6cc8d4 in CppUnit::TestCaller<DialogSaveTest>::runTest (this=0x879cc0) at workdir/UnpackedTarball/cppunit/include/cppunit/TestCaller.h:166 > #11 0x00002af589bb41b4 in CppUnit::TestCaseMethodFunctor::operator() (this=0x7fff58142f30) at TestCase.cpp:32 > #12 0x00002af58c8ab9e3 in (anonymous namespace)::Prot::protect (this=0x879da0, functor=...) at unotest/source/cpp/unobootstrapprotector/unobootstrapprotector.cxx:88 > #13 0x00002af589bac2ef in CppUnit::ProtectorChain::ProtectFunctor::operator() (this=0x922aa0) at ProtectorChain.cpp:20 > #14 0x00002af58b4b5536 in (anonymous namespace)::Prot::protect (this=0x879dc0, functor=..., context=...) at unotest/source/cpp/unoexceptionprotector/unoexceptionprotector.cxx:64 > #15 0x00002af589bac2ef in CppUnit::ProtectorChain::ProtectFunctor::operator() (this=0x922ca0) at ProtectorChain.cpp:20 > #16 0x00002af589b9dc64 in CppUnit::DefaultProtector::protect (this=0x8756a0, functor=..., context=...) at DefaultProtector.cpp:15 > #17 0x00002af589bac2ef in CppUnit::ProtectorChain::ProtectFunctor::operator() (this=0x922c70) at ProtectorChain.cpp:20 > #18 0x00002af589bac184 in CppUnit::ProtectorChain::protect (this=0x8753c0, functor=..., context=...) at ProtectorChain.cpp:77 > #19 0x00002af589bc339a in CppUnit::TestResult::protect (this=0x7fff58143450, functor=..., test=0x879cc0, shortDescription="") at TestResult.cpp:181 > #20 0x00002af589bb3c84 in CppUnit::TestCase::run (this=0x879cc0, result=0x7fff58143450) at TestCase.cpp:92 > #21 0x00002af589bb4a20 in CppUnit::TestComposite::doRunChildTests (this=0x922b50, controller=0x7fff58143450) at TestComposite.cpp:64 > #22 0x00002af589bb48aa in CppUnit::TestComposite::run (this=0x922b50, result=0x7fff58143450) at TestComposite.cpp:23 > #23 0x00002af589bb4a20 in CppUnit::TestComposite::doRunChildTests (this=0x922ad0, controller=0x7fff58143450) at TestComposite.cpp:64 > #24 0x00002af589bb48aa in CppUnit::TestComposite::run (this=0x922ad0, result=0x7fff58143450) at TestComposite.cpp:23 > #25 0x00002af589bca586 in CppUnit::TestRunner::WrappingSuite::run (this=0x879d30, result=0x7fff58143450) at TestRunner.cpp:47 > #26 0x00002af589bc30a4 in CppUnit::TestResult::runTest (this=0x7fff58143450, test=0x879d30) at TestResult.cpp:148 > #27 0x00002af589bca7e4 in CppUnit::TestRunner::run (this=0x7fff581432e0, controller=..., testPath="") at TestRunner.cpp:96 > #28 0x0000000000403ecf in (anonymous namespace)::ProtectedFixtureFunctor::run (this=0x7fff581433a0) at sal/cppunittester/cppunittester.cxx:150 > #29 0x0000000000404561 in sal_main () at sal/cppunittester/cppunittester.cxx:242 > #30 0x00000000004041a9 in main (argc=18, argv=0x7fff581436a8) at sal/cppunittester/cppunittester.cxx:166 and indeed UnoApiTest::setUp -> test::BootstrapFixture::setUp -> test_init_impl -> InitVCL -> CreateSalInstance -> SalGenericInstance::AcquireYieldMutex causes all such UnoApiTests to be run with the SolarMutex locked. This reverts acdfb2593564ea23d4bbb999856922568d7ab2c3 "dbaccess: disable hanging close() for now." Change-Id: Ifac49da2c55b0b27b780a348074f69de86967aa1
Diffstat (limited to 'dbaccess')
-rw-r--r--dbaccess/qa/extras/dialog-save.cxx8
1 files changed, 7 insertions, 1 deletions
diff --git a/dbaccess/qa/extras/dialog-save.cxx b/dbaccess/qa/extras/dialog-save.cxx
index 4b162ad23565..0d212c1a3ca1 100644
--- a/dbaccess/qa/extras/dialog-save.cxx
+++ b/dbaccess/qa/extras/dialog-save.cxx
@@ -61,6 +61,12 @@ DialogSaveTest::DialogSaveTest()
void DialogSaveTest::test()
{
+ // UnoApiTest::setUp (via InitVCL) puts each test under a locked SolarMutex,
+ // but at least the below xDocCloseable->close call could lead to a deadlock
+ // then, and it looks like none of the code here requires the SolarMutex to
+ // be locked anyway:
+ SolarMutexReleaser rel;
+
OUString aFileName;
aFileName = getURLFromWorkdir("CppunitTest/testDialogSave.odb");
{
@@ -101,7 +107,7 @@ void DialogSaveTest::test()
// close
uno::Reference< util::XCloseable > xDocCloseable(xComponent, UNO_QUERY_THROW);
CPPUNIT_ASSERT(xDocCloseable.is());
- //xDocCloseable->close(false);
+ xDocCloseable->close(false);
// All our uno::References are (should?) be invalid now -> let them go out of scope
}