sc/source/ui/unoobj/cellsuno.cxx  |    1 +
 toolkit/source/awt/vclxwindow.cxx |    2 +-
 vcl/inc/vcl/svapp.hxx             |   25 +++----------------------
 3 files changed, 5 insertions(+), 23 deletions(-)

New commits:
commit 1ef1781390845d03b6e1518bbac81b818be62f3d
Author: Stephan Bergmann <sberg...@redhat.com>
Date:   Mon Jan 16 15:49:13 2012 +0100

    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.

diff --git a/toolkit/source/awt/vclxwindow.cxx 
b/toolkit/source/awt/vclxwindow.cxx
index 819c6d4..76eab5b 100644
--- a/toolkit/source/awt/vclxwindow.cxx
+++ b/toolkit/source/awt/vclxwindow.cxx
@@ -310,7 +310,7 @@ IMPL_LINK( VCLXWindowImpl, OnProcessCallbacks, void*, 
EMPTYARG )
     }
 
     {
-        SolarMutexReleaser aReleaseSolar( 
SolarMutexReleaser::RescheduleDuringAcquire );
+        SolarMutexReleaser aReleaseSolar;
         for (   CallbackArray::const_iterator loop = aCallbacksCopy.begin();
                 loop != aCallbacksCopy.end();
                 ++loop
diff --git a/vcl/inc/vcl/svapp.hxx b/vcl/inc/vcl/svapp.hxx
index ba33ee2..2c26c55 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 );
     }
 };
 
commit 973d92a2a27d63e1c5fd6858ca6b45565a722bec
Author: Stephan Bergmann <sberg...@redhat.com>
Date:   Mon Jan 16 15:47:47 2012 +0100

    Missing SolarMutexGuard.

diff --git a/sc/source/ui/unoobj/cellsuno.cxx b/sc/source/ui/unoobj/cellsuno.cxx
index 2d3db0a..532bbbe 100644
--- a/sc/source/ui/unoobj/cellsuno.cxx
+++ b/sc/source/ui/unoobj/cellsuno.cxx
@@ -3881,6 +3881,7 @@ uno::Reference<container::XIndexAccess> SAL_CALL 
ScCellRangesBase::findAll(
                         const uno::Reference<util::XSearchDescriptor>& xDesc )
                                                     
throw(uno::RuntimeException)
 {
+    SolarMutexGuard aGuard;
     //  Wenn nichts gefunden wird, soll Null zurueckgegeben werden (?)
     uno::Reference<container::XIndexAccess> xRet;
     if ( pDocShell && xDesc.is() )
_______________________________________________
Libreoffice-commits mailing list
Libreoffice-commits@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to