summaryrefslogtreecommitdiff
path: root/vcl/inc/vcl/svapp.hxx
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2012-01-16 15:49:13 +0100
committerStephan Bergmann <sbergman@redhat.com>2012-01-16 16:00:06 +0100
commit1ef1781390845d03b6e1518bbac81b818be62f3d (patch)
tree45f5bce92e2d6f3b6800f101ad5a4fccc28abe1c /vcl/inc/vcl/svapp.hxx
parent973d92a2a27d63e1c5fd6858ca6b45565a722bec (diff)
Revert RescheduleDuringAcquire, it leads to code being run w/o solar mutex.
6a8fd4c76a969ac98d1aff91ff7442f43aee0006 claims that RescheduleDuringAcquire is necessary to prevent deadlocks, but fails to explain what those deadlocks look like (and the cited HH internal issue 163542 is not available for inspection). It does lead to code erroneously being called with unlocked solar mutex, leading to crashes like Thread 1: 0 in com::sun::star::uno::BaseReference::is at solver/unxlngx6/inc/com/sun/star/uno/Reference.h:103 1 in sdr::contact::ControlHolder::is at svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx:204 2 in sdr::contact::ViewObjectContactOfUnoControl_Impl::hasControl at svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx:642 3 in sdr::contact::ViewObjectContactOfUnoControl::isPrimitiveVisible at svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx:1815 4 in sdr::contact::ViewObjectContact::getPrimitive2DSequenceHierarchy at svx/source/sdr/contact/viewobjectcontact.cxx:396 5 in sdr::contact::ViewObjectContact::getPrimitive2DSequenceSubHierarchy at svx/source/sdr/contact/viewobjectcontact.cxx:428 6 in sdr::contact::ViewObjectContactOfPageHierarchy::getPrimitive2DSequenceHierarchy at svx/source/sdr/contact/viewobjectcontactofsdrpage.cxx:450 7 in sdr::contact::ViewObjectContact::getPrimitive2DSequenceSubHierarchy at svx/source/sdr/contact/viewobjectcontact.cxx:428 8 in sdr::contact::ViewObjectContactOfSdrPage::getPrimitive2DSequenceHierarchy at svx/source/sdr/contact/viewobjectcontactofsdrpage.cxx:699 9 in sdr::contact::ObjectContactOfPageView::DoProcessDisplay at svx/source/sdr/contact/objectcontactofpageview.cxx:248 10 in sdr::contact::ObjectContactOfPageView::ProcessDisplay at svx/source/sdr/contact/objectcontactofpageview.cxx:132 11 in SdrPageWindow::RedrawLayer at svx/source/svdraw/sdrpagewindow.cxx:391 12 in SdrPageView::DrawLayer at svx/source/svdraw/svdpagv.cxx:398 13 in SwViewImp::PaintLayer at sw/source/core/view/vdraw.cxx:148 14 in SwRootFrm::Paint at sw/source/core/layout/paintfrm.cxx:2976 15 in ViewShell::Paint at sw/source/core/view/viewsh.cxx:1678 16 in SwCrsrShell::Paint at sw/source/core/crsr/crsrsh.cxx:1165 17 in SwEditWin::Paint at sw/source/ui/docvw/edtwin2.cxx:535 18 in Window::ImplCallPaint at vcl/source/window/window.cxx:2417 19 in Window::ImplCallPaint at vcl/source/window/window.cxx:2441 20 in Window::ImplCallPaint at vcl/source/window/window.cxx:2441 21 in Window::ImplCallPaint at vcl/source/window/window.cxx:2441 22 in Window::ImplCallPaint at vcl/source/window/window.cxx:2441 23 in Window::ImplCallPaint at vcl/source/window/window.cxx:2441 24 in Window::ImplCallPaint at vcl/source/window/window.cxx:2441 25 in Window::ImplCallOverlapPaint at vcl/source/window/window.cxx:2477 26 in Window::ImplHandlePaintHdl at vcl/source/window/window.cxx:2497 27 in Window::LinkStubImplHandlePaintHdl at vcl/source/window/window.cxx:2491 28 in Link::Call at solver/unxlngx6/inc/tools/link.hxx:140 29 in Timer::Timeout at vcl/source/app/timer.cxx:256 30 in Timer::ImplTimerCallbackProc at vcl/source/app/timer.cxx:144 31 in SalTimer::CallCallback at vcl/inc/saltimer.hxx:66 32 in SvpSalInstance::CheckTimeout at vcl/headless/svpinst.cxx:199 33 in SvpSalInstance::Yield at vcl/headless/svpinst.cxx:310 34 in ImplYield at vcl/source/app/svapp.cxx:455 35 in Application::Reschedule at vcl/source/app/svapp.cxx:482 36 in SolarMutexReleaser::~SolarMutexReleaser at solver/unxlngx6/inc/vcl/svapp.hxx:551 37 in VCLXWindowImpl::OnProcessCallbacks at toolkit/source/awt/vclxwindow.cxx:320 38 in VCLXWindowImpl::LinkStubOnProcessCallbacks at toolkit/source/awt/vclxwindow.cxx:291 39 in Link::Call at solver/unxlngx6/inc/tools/link.hxx:140 40 in ImplHandleUserEvent at vcl/source/window/winproc.cxx:1999 41 in ImplWindowFrameProc at vcl/source/window/winproc.cxx:2571 42 in SalFrame::CallCallback at vcl/inc/salframe.hxx:294 43 in SvpSalInstance::Yield at vcl/headless/svpinst.cxx:299 44 in ImplYield at vcl/source/app/svapp.cxx:455 45 in Application::Yield at vcl/source/app/svapp.cxx:489 46 in Application::Execute at vcl/source/app/svapp.cxx:432 47 in desktop::Desktop::Main at desktop/source/app/app.cxx:1824 48 in ImplSVMain at vcl/source/app/svmain.cxx:178 49 in SVMain at vcl/source/app/svmain.cxx:215 50 in soffice_main at desktop/source/app/sofficemain.cxx:67 51 in sal_main at desktop/source/app/main.c:34 52 in main at desktop/source/app/main.c:33 Thread 2: 0 __lll_unlock_wake at ../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:373 1 in _L_unlock_657 from /lib64/libpthread-2.12.so 2 in __pthread_mutex_unlock_usercnt at pthread_mutex_unlock.c:52 3 __pthread_mutex_unlock at pthread_mutex_unlock.c:290 4 in osl_releaseMutex at sal/osl/unx/mutex.c:179 5 in vcl::SolarMutexObject::release at vcl/source/app/solarmutex.cxx:54 6 in SalYieldMutex::release at vcl/generic/app/geninst.cxx:73 7 in SolarMutexGuard::~SolarMutexGuard at solver/unxlngx6/inc/vcl/svapp.hxx:436 8 in SfxBaseModel::close at sfx2/source/doc/sfxbasemodel.cxx:1500 9 in SwXTextDocument::close at sw/source/ui/uno/unotxdoc.cxx:574 10 in callVirtualMethod at bridges/source/cpp_uno/gcc3_linux_x86-64/uno2cpp.cxx:155 11 in cpp_call at bridges/source/cpp_uno/gcc3_linux_x86-64/uno2cpp.cxx:392 12 in bridges::cpp_uno::shared::unoInterfaceProxyDispatch at bridges/source/cpp_uno/gcc3_linux_x86-64/uno2cpp.cxx:586 13 in binaryurp::IncomingRequest::execute_throw at binaryurp/source/incomingrequest.cxx:263 14 in binaryurp::IncomingRequest::execute at binaryurp/source/incomingrequest.cxx:89 15 in binaryurp::(anonymous namespace)::request at binaryurp/source/reader.cxx:107 16 in cppu_threadpool::JobQueue::enter at cppu/source/threadpool/jobqueue.cxx:121 17 in cppu_threadpool::ORequestThread::run at cppu/source/threadpool/thread.cxx:222 18 in cppu_requestThreadWorker at cppu/source/threadpool/thread.cxx:57 19 in osl_thread_start_Impl at sal/osl/unx/thread.c:292 20 in start_thread at pthread_create.c:301 21 in clone at ../sysdeps/unix/sysv/linux/x86_64/clone.S:115 Looks best to remove that strange feature again and, if deadlocks should resurface, how to fix them cleanly.
Diffstat (limited to 'vcl/inc/vcl/svapp.hxx')
-rw-r--r--vcl/inc/vcl/svapp.hxx25
1 files changed, 3 insertions, 22 deletions
diff --git a/vcl/inc/vcl/svapp.hxx b/vcl/inc/vcl/svapp.hxx
index ba33ee2109ee..2c26c55e33d7 100644
--- a/vcl/inc/vcl/svapp.hxx
+++ b/vcl/inc/vcl/svapp.hxx
@@ -531,32 +531,13 @@ protected:
class SolarMutexReleaser
{
sal_uLong mnReleased;
- const bool mbRescheduleDuringAcquire;
+
public:
- enum
- {
- RescheduleDuringAcquire = true
- };
- SolarMutexReleaser( const bool i_rescheduleDuringAcquire = false )
- : mnReleased( Application::ReleaseSolarMutex())
- , mbRescheduleDuringAcquire( i_rescheduleDuringAcquire )
- {
- }
+ SolarMutexReleaser(): mnReleased(Application::ReleaseSolarMutex()) {}
~SolarMutexReleaser()
{
- if ( mnReleased > 0 )
- {
- if ( mbRescheduleDuringAcquire )
- {
- while ( !Application::GetSolarMutex().tryToAcquire() )
- {
- Application::Reschedule();
- }
- --mnReleased;
- }
- Application::AcquireSolarMutex( mnReleased );
- }
+ Application::AcquireSolarMutex( mnReleased );
}
};