[Libreoffice-commits] core.git: Branch 'libreoffice-5-1' - sc/source

Noel Grandin noel at peralex.com
Mon Nov 30 22:35:57 PST 2015


 sc/source/ui/formdlg/dwfunctr.cxx |    9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

New commits:
commit 3d5f762b49253f4758824e883d1a429f09001b99
Author: Noel Grandin <noel at peralex.com>
Date:   Tue Dec 1 08:32:58 2015 +0200

    tdf#95990 - Calc is crashed when you double click on function in Sideba
    
    The problem arises because we can dispose ourselves like so:
    
    /home/noel/libo3/sc/source/ui/formdlg/dwfunctr.cxx:176
    /home/noel/libo3/vcl/source/outdev/outdev.cxx:202
    (this=0x252c548) at /home/noel/libo3/include/vcl/vclptr.hxx:206
    (this=0x252c4c0) at
    /home/noel/libo3/sfx2/source/sidebar/SidebarPanelBase.cxx:85
    (this=0x252c4c0) at /home/noel/libo3/cppuhelper/source/implbase.cxx:109
    cppu::WeakComponentImplHelper5<com::sun::star::ui::XContextChangeEventListener,
    com::sun::star::ui::XUIElement, com::sun::star::ui::XToolPanel,
    com::sun::star::ui::XSidebarPanel,
    com::sun::star::ui::XUpdateModel>::dispose (this=0x252c4c0) at
    /home/noel/libo3/include/cppuhelper/compbase5.hxx:60
    at /home/noel/libo3/sfx2/source/sidebar/Panel.cxx:88
    /home/noel/libo3/vcl/source/outdev/outdev.cxx:202
    (this=0x21dbbd0) at /home/noel/libo3/include/vcl/vclptr.hxx:206
    (this=0x23c9a10, rPanels=std::__debug::vector of length 1, capacity 1 =
    {...}) at /home/noel/libo3/sfx2/source/sidebar/Deck.cxx:205
    (this=0x2068b00, rDeckId="ScFunctionsDeck") at
    /home/noel/libo3/sfx2/source/sidebar/SidebarController.cxx:631
    (this=0x2068b00, rDeckId="ScFunctionsDeck", bForceCreate=false)
        at /home/noel/libo3/sfx2/source/sidebar/SidebarController.cxx:566
    (this=0x2068b00, rDeckDescriptor=..., rContext=...) at
    /home/noel/libo3/sfx2/source/sidebar/SidebarController.cxx:690
    sfx2::sidebar::SidebarController::UpdateConfigurations (this=0x2068b00)
    at /home/noel/libo3/sfx2/source/sidebar/SidebarController.cxx:500
    sfx2::sidebar::SidebarController::notifyContextChangeEvent
    (this=0x2068b00, rEvent=...) at
    /home/noel/libo3/sfx2/source/sidebar/SidebarController.cxx:275
    namespace)::ContextChangeEventMultiplexer::BroadcastEventToSingleContainer
    (this=0x207bad0, rEventObject=...,
        rxEventFocus=uno::Reference to (ScTabViewObj *) 0x1d9d120) at
    /home/noel/libo3/framework/source/services/ContextChangeEventMultiplexer.cxx:286
    namespace)::ContextChangeEventMultiplexer::broadcastContextChangeEvent
    (this=0x207bad0, rEventObject=...,
        rxEventFocus=uno::Reference to (ScTabViewObj *) 0x1d9d120) at
    /home/noel/libo3/framework/source/services/ContextChangeEventMultiplexer.cxx:265
    sfx2::sidebar::ContextChangeBroadcaster::BroadcastContextChange
    (this=0x23f0e50, rxFrame=uno::Reference to ((anonymous namespace)::Frame
    *) 0x17d1798,
        rsModuleName="com.sun.star.sheet.SpreadsheetDocument",
    rsContextName="EditCell") at
    /home/noel/libo3/sfx2/source/sidebar/ContextChangeBroadcaster.cxx:99
    sfx2::sidebar::ContextChangeBroadcaster::Activate (this=0x23f0e50,
    rxFrame=uno::Reference to ((anonymous namespace)::Frame *) 0x17d1798)
        at
    /home/noel/libo3/sfx2/source/sidebar/ContextChangeBroadcaster.cxx:51
    (this=0x2190490, bIsActivated=true) at
    /home/noel/libo3/sfx2/source/control/shell.cxx:729
    /home/noel/libo3/sfx2/source/control/shell.cxx:378
    pFrame=0x1d5dea0, bMDI=true) at
    /home/noel/libo3/sfx2/source/control/shell.cxx:331
    /home/noel/libo3/sfx2/source/control/dispatch.cxx:1503
    /home/noel/libo3/sfx2/source/control/dispatch.cxx:158
    rShell=...) at /home/noel/libo3/sfx2/source/view/viewsh.cxx:1420
    (this=0x1d61fe0, eOST=OST_Editing, bForce=false) at
    /home/noel/libo3/sc/source/ui/view/tabvwsh4.cxx:809
    pView=0x1d685c0, bActive=true) at
    /home/noel/libo3/sc/source/ui/view/tabvwsh4.cxx:753
    rBC=..., rHint=...) at
    /home/noel/libo3/sc/source/ui/view/tabvwsh5.cxx:195
    pEditEngine=0x20570d0, rCursorPos=...) at
    /home/noel/libo3/sc/source/ui/docshell/docsh3.cxx:78
    eNewMode=SC_INPUT_TABLE, pInitText=0x0) at
    /home/noel/libo3/sc/source/ui/app/inputhdl.cxx:2339
    eMode=SC_INPUT_TABLE, pInitText=0x0) at
    /home/noel/libo3/sc/source/ui/app/scmod.cxx:1404
    /home/noel/libo3/sc/source/ui/formdlg/dwfunctr.cxx:826
    (this=0x23d29a0) at
    /home/noel/libo3/sc/source/ui/formdlg/dwfunctr.cxx:962
    (instance=0x23d29a0, data=...) at
    /home/noel/libo3/sc/source/ui/formdlg/dwfunctr.cxx:960
    data=...) at /home/noel/libo3/include/tools/link.hxx:84
    (__closure=0x7fffffff3ec0) at
    /home/noel/libo3/vcl/source/control/lstbox.cxx:973
    ListBox::DoubleClick()::<lambda()> >::_M_invoke(const std::_Any_data &)
    (__functor=...) at /usr/include/c++/5/functional:1871
    (this=0x7fffffff3ec0) at /usr/include/c++/5/functional:2271
    Control::ImplCallEventListenersAndHandler(unsigned long,
    std::function<void ()>) (this=0x23e6260, nEvent=1109, callHandler=...)
        at /home/noel/libo3/vcl/source/control/ctrl.cxx:333
    /home/noel/libo3/vcl/source/control/lstbox.cxx:973
    at /home/noel/libo3/vcl/source/control/lstbox.cxx:294
    (instance=0x23e6260, data=0x23fd160) at
    /home/noel/libo3/vcl/source/control/lstbox.cxx:292
    (this=0x23fd4a0, data=0x23fd160) at
    /home/noel/libo3/include/tools/link.hxx:84
    (this=0x23fd160, rMEvt=...) at
    /home/noel/libo3/vcl/source/control/ilstbox.cxx:874
    
    and then two lines later we need access to things we have just disposed:
    
    at /home/noel/libo3/include/rtl/ref.hxx:169
    (this=0x258) at /home/noel/libo3/include/vcl/vclptr.hxx:187
    nIndex=0) at /home/noel/libo3/vcl/source/control/lstbox.cxx:1088
    at /home/noel/libo3/vcl/source/control/lstbox.cxx:1076
    /home/noel/libo3/sc/source/ui/formdlg/dwfunctr.cxx:828
    
    Change-Id: I0ee07c7753ac06d042653f443df9921f4eebd8f2
    (cherry picked from commit f34b4844473d08c0c264ba4453a875e32f5c326b)

diff --git a/sc/source/ui/formdlg/dwfunctr.cxx b/sc/source/ui/formdlg/dwfunctr.cxx
index 9cb5a30..a44b021 100644
--- a/sc/source/ui/formdlg/dwfunctr.cxx
+++ b/sc/source/ui/formdlg/dwfunctr.cxx
@@ -112,7 +112,7 @@ ScFunctionDockWin::ScFunctionDockWin( SfxBindings* pBindingsP,
         eSfxNewAlignment=SfxChildAlignment::RIGHT;
     eSfxOldAlignment=eSfxNewAlignment;
     aFiFuncDesc->SetUpdateMode(true);
-    pAllFuncList=aFuncList.get();
+    pAllFuncList=aFuncList;
     aDDFuncList->Disable();
     aDDFuncList->Hide();
     nArgs=0;
@@ -275,7 +275,7 @@ void ScFunctionDockWin::SetSize()
                             aPrivatSplit->Hide();
                             aFuncList->Disable();
                             aFuncList->Hide();
-                            pAllFuncList=aDDFuncList.get();
+                            pAllFuncList=aDDFuncList;
                             SelHdl(*aCatBox.get());
                             aDDFuncList->SelectEntryPos(nSelEntry);
                         }
@@ -293,7 +293,7 @@ void ScFunctionDockWin::SetSize()
                             aPrivatSplit->Show();
                             aFuncList->Enable();
                             aFuncList->Show();
-                            pAllFuncList=aFuncList.get();
+                            pAllFuncList=aFuncList;
                             SelHdl(*aCatBox.get());
                             aFuncList->SelectEntryPos(nSelEntry);
                         }
@@ -822,6 +822,9 @@ void ScFunctionDockWin::DoEnter()
         if(!pScMod->IsEditMode())
         {
             pScMod->SetInputMode(SC_INPUT_TABLE);
+            // the above call can result in us being disposed
+            if (OutputDevice::isDisposed())
+                return;
             aString = "=";
             aString += pAllFuncList->GetSelectEntry();
             if (pHdl)


More information about the Libreoffice-commits mailing list