sw/source/uibase/inc/redlndlg.hxx  |    1 +
 sw/source/uibase/misc/redlndlg.cxx |    4 ++++
 2 files changed, 5 insertions(+)

New commits:
commit 3b71e5ef440d3fa8ceac9dd3591171ad1a076bd4
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Wed Mar 27 21:54:23 2024 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Thu Mar 28 10:46:13 2024 +0100

    prevent crash in SwModelessRedlineAcceptDlg destruction
    
    Seems to be timing dependent, does not always happen.
    
    Stack:
     #0 sal::backtrace_get(unsigned int) at sal/osl/unx/backtraceapi.cxx:42 
(discriminator 1)
     #1 (anonymous namespace)::printStack(int) at sal/osl/unx/signal.cxx:289
     #2 (anonymous namespace)::callSystemHandler(int, siginfo_t*, void*) at 
sal/osl/unx/signal.cxx:330
     #3 (anonymous namespace)::signalHandlerFunction(int, siginfo_t*, void*) at 
sal/osl/unx/signal.cxx:427
     #4 __restore_rt at libc_sigaction.c:?
     #5 std::__uniq_ptr_impl<weld::ComboBox, 
std::default_delete<weld::ComboBox> >::_M_ptr() const at 
/usr/include/c++/13/bits/unique_ptr.h:199 (discriminator 1)
     #6 std::unique_ptr<weld::ComboBox, std::default_delete<weld::ComboBox> 
>::get() const at /usr/include/c++/13/bits/unique_ptr.h:470
     #7 std::unique_ptr<weld::ComboBox, std::default_delete<weld::ComboBox> 
>::operator->() const at /usr/include/c++/13/bits/unique_ptr.h:464
     #8 SvxTPFilter::GetSelectedAuthor() const at 
svx/source/dialog/ctredlin.cxx:636 (discriminator 1)
     #9 SwRedlineAcceptDlg::InitAuthors() at 
sw/source/uibase/misc/redlndlg.cxx:256
     #10 SwRedlineAcceptDlg::Activate() at 
sw/source/uibase/misc/redlndlg.cxx:492
     #11 SwModelessRedlineAcceptDlg::Activate() at 
sw/source/uibase/misc/redlndlg.cxx:123
     #12 SfxDialogController::FocusChangeHdl(weld::Container&) at 
sfx2/source/dialog/basedlgs.cxx:117
     #13 SfxDialogController::LinkStubFocusChangeHdl(void*, weld::Container&) 
at sfx2/source/dialog/basedlgs.cxx:111
     #14 Link<weld::Container&, void>::Call(weld::Container&) const at 
include/tools/link.hxx:111
     #15 weld::Container::signal_container_focus_changed() at 
include/vcl/weld.hxx:368
     #16 SalInstanceContainer::HandleEventListener(VclWindowEvent&) at 
vcl/source/app/salvtables.cxx:1328
     #17 SalInstanceWidget::EventListener(VclWindowEvent&) at 
vcl/source/app/salvtables.cxx:824
     #18 SalInstanceWidget::LinkStubEventListener(void*, VclWindowEvent&) at 
vcl/source/app/salvtables.cxx:821
     #19 Link<VclWindowEvent&, void>::Call(VclWindowEvent&) const at 
include/tools/link.hxx:111
     #20 vcl::Window::CallEventListeners(VclEventId, void*) at 
vcl/source/window/event.cxx:257 (discriminator 2)
     #21 vcl::Window::ImplCallActivateListeners(vcl::Window*) at 
vcl/source/window/window.cxx:3438
     #22 vcl::Window::ImplCallActivateListeners(vcl::Window*) at 
vcl/source/window/window.cxx:3442 (discriminator 1)
     #23 vcl::Window::ImplCallActivateListeners(vcl::Window*) at 
vcl/source/window/window.cxx:3442 (discriminator 1)
     #24 vcl::Window::ImplCallActivateListeners(vcl::Window*) at 
vcl/source/window/window.cxx:3442 (discriminator 1)
     #25 vcl::Window::ImplCallActivateListeners(vcl::Window*) at 
vcl/source/window/window.cxx:3442 (discriminator 1)
     #26 vcl::Window::ImplCallActivateListeners(vcl::Window*) at 
vcl/source/window/window.cxx:3442 (discriminator 1)
     #27 vcl::Window::ImplCallActivateListeners(vcl::Window*) at 
vcl/source/window/window.cxx:3442 (discriminator 1)
     #28 vcl::Window::ImplCallActivateListeners(vcl::Window*) at 
vcl/source/window/window.cxx:3442 (discriminator 1)
     #29 vcl::Window::ImplGrabFocus(GetFocusFlags) at 
vcl/source/window/mouse.cxx:386 (discriminator 15)
     #30 vcl::Window::GrabFocus() at vcl/source/window/window.cxx:2989
     #31 vcl::Window::dispose() at vcl/source/window/window.cxx:433
     #32 Control::dispose() at vcl/source/control/ctrl.cxx:66
     #33 SvTreeListBox::dispose() at vcl/source/treelist/treelistbox.cxx:1341
     #34 SvTabListBox::dispose() at vcl/source/treelist/svtabbx.cxx:244
     #35 SvHeaderTabListBox::dispose() at vcl/source/treelist/svtabbx.cxx:529
     #36 VclReferenceBase::disposeOnce() at 
vcl/source/outdev/vclreferencebase.cxx:38
     #37 VclPtr<vcl::Window>::disposeAndClear() at include/vcl/vclptr.hxx:209
     #38 VclBuilder::disposeBuilder() at vcl/source/window/builder.cxx:810 
(discriminator 2)
     #39 VclBuilder::~VclBuilder() at vcl/source/window/builder.cxx:805
     #40 std::default_delete<VclBuilder>::operator()(VclBuilder*) const at 
/usr/include/c++/13/bits/unique_ptr.h:99 (discriminator 1)
     #41 std::__uniq_ptr_impl<VclBuilder, std::default_delete<VclBuilder> 
>::reset(VclBuilder*) at /usr/include/c++/13/bits/unique_ptr.h:212
     #42 std::unique_ptr<VclBuilder, std::default_delete<VclBuilder> 
>::reset(VclBuilder*) at /usr/include/c++/13/bits/unique_ptr.h:510
     #43 SalInstanceBuilder::~SalInstanceBuilder() at 
vcl/source/app/salvtables.cxx:7456
     #44 SalInstanceBuilder::~SalInstanceBuilder() at 
vcl/source/app/salvtables.cxx:7457 (discriminator 1)
     #45 std::default_delete<weld::Builder>::operator()(weld::Builder*) const 
at /usr/include/c++/13/bits/unique_ptr.h:100
     #46 std::unique_ptr<weld::Builder, std::default_delete<weld::Builder> 
>::~unique_ptr() at /usr/include/c++/13/bits/unique_ptr.h:405
     #47 SvxTPage::~SvxTPage() at svx/source/dialog/ctredlin.cxx:289
     #48 SvxTPView::~SvxTPView() at svx/source/dialog/ctredlin.cxx:341
     #49 SvxTPView::~SvxTPView() at svx/source/dialog/ctredlin.cxx:341 
(discriminator 1)
     #50 std::default_delete<SvxTPView>::operator()(SvxTPView*) const at 
/usr/include/c++/13/bits/unique_ptr.h:100
     #51 std::__uniq_ptr_impl<SvxTPView, std::default_delete<SvxTPView> 
>::reset(SvxTPView*) at /usr/include/c++/13/bits/unique_ptr.h:212
     #52 std::unique_ptr<SvxTPView, std::default_delete<SvxTPView> 
>::reset(SvxTPView*) at /usr/include/c++/13/bits/unique_ptr.h:510
     #53 SvxAcceptChgCtr::~SvxAcceptChgCtr() at 
svx/source/dialog/ctredlin.cxx:972
     #54 std::default_delete<SvxAcceptChgCtr>::operator()(SvxAcceptChgCtr*) 
const at /usr/include/c++/13/bits/unique_ptr.h:99 (discriminator 1)
     #55 std::unique_ptr<SvxAcceptChgCtr, std::default_delete<SvxAcceptChgCtr> 
>::~unique_ptr() at /usr/include/c++/13/bits/unique_ptr.h:405
     #56 SwRedlineAcceptDlg::~SwRedlineAcceptDlg() at 
sw/source/uibase/misc/redlndlg.cxx:210 (discriminator 3)
     #57 
std::default_delete<SwRedlineAcceptDlg>::operator()(SwRedlineAcceptDlg*) const 
at /usr/include/c++/13/bits/unique_ptr.h:99 (discriminator 1)
     #58 std::unique_ptr<SwRedlineAcceptDlg, 
std::default_delete<SwRedlineAcceptDlg> >::~unique_ptr() at 
/usr/include/c++/13/bits/unique_ptr.h:405
     #59 SwModelessRedlineAcceptDlg::~SwModelessRedlineAcceptDlg() at 
sw/source/uibase/misc/redlndlg.cxx:141 (discriminator 1)
     #60 void 
std::destroy_at<SwModelessRedlineAcceptDlg>(SwModelessRedlineAcceptDlg*) at 
/usr/include/c++/13/bits/stl_construct.h:89
     #61 void 
std::_Destroy<SwModelessRedlineAcceptDlg>(SwModelessRedlineAcceptDlg*) at 
/usr/include/c++/13/bits/stl_construct.h:153
     #62 std::_Sp_counted_ptr_inplace<SwModelessRedlineAcceptDlg, 
std::allocator<void>, (__gnu_cxx::_Lock_policy)2>::_M_dispose() at 
/usr/include/c++/13/bits/alloc_traits.h:674
     #63 
std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release_last_use() at 
/usr/include/c++/13/bits/shared_ptr_base.h:187
     #64 
std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release_last_use_cold() 
at /usr/include/c++/13/bits/shared_ptr_base.h:199
     #65 std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release() at 
/usr/include/c++/13/bits/shared_ptr_base.h:354
     #66 std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count() at 
/usr/include/c++/13/bits/shared_ptr_base.h:1072
     #67 std::__shared_ptr<SfxDialogController, 
(__gnu_cxx::_Lock_policy)2>::~__shared_ptr() at 
/usr/include/c++/13/bits/shared_ptr_base.h:1524
     #68 std::__shared_ptr<SfxDialogController, 
(__gnu_cxx::_Lock_policy)2>::reset() at 
/usr/include/c++/13/bits/shared_ptr_base.h:1642
     #69 SfxChildWindow::~SfxChildWindow() at sfx2/source/appl/childwin.cxx:197
     #70 SwChildWinWrapper::~SwChildWinWrapper() at 
sw/source/uibase/inc/chldwrap.hxx:27
     #71 SwRedlineAcceptChild::~SwRedlineAcceptChild() at 
sw/source/uibase/inc/redlndlg.hxx:144
     #72 SwRedlineAcceptChild::~SwRedlineAcceptChild() at 
sw/source/uibase/inc/redlndlg.hxx:144 (discriminator 1)
     #73 SfxChildWindow::Destroy() at sfx2/source/appl/childwin.cxx:177
     #74 SfxWorkWindow::DeleteControllers_Impl() at 
sfx2/source/appl/workwin.cxx:608
     #75 SfxFrame::DoClose_Impl() at sfx2/source/view/frame.cxx:137
     #76 SfxBaseController::dispose() at 
sfx2/source/view/sfxbasecontroller.cxx:930
     #77 (anonymous 
namespace)::XFrameImpl::setComponent(com::sun::star::uno::Reference<com::sun::star::awt::XWindow>
 const&, com::sun::star::uno::Reference<com::sun::star::frame::XController> 
const&) at framework/source/services/frame.cxx:1500
     #78 framework::CloseDispatcher::implts_establishBackingMode() at 
framework/source/dispatch/closedispatcher.cxx:536
     #79 framework::CloseDispatcher::impl_asyncCallback(LinkParamNone*) at 
framework/source/dispatch/closedispatcher.cxx:403 (discriminator 1)
     #80 
framework::CloseDispatcher::dispatchWithNotification(com::sun::star::util::URL 
const&, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> 
const&, 
com::sun::star::uno::Reference<com::sun::star::frame::XDispatchResultListener> 
const&) at framework/source/dispatch/closedispatcher.cxx:222
     #81 framework::CloseDispatcher::dispatch(com::sun::star::util::URL const&, 
com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&) at 
framework/source/dispatch/closedispatcher.cxx:91 (discriminator 2)
     #82 comphelper::dispatchCommand(rtl::OUString const&, 
com::sun::star::uno::Reference<com::sun::star::frame::XFrame> const&, 
com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&, 
com::sun::star::uno::Reference<com::sun::star::frame::XDispatchResultListener> 
const&) at comphelper/source/misc/dispatchcommand.cxx:63
     #83 comphelper::dispatchCommand(rtl::OUString const&, 
com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&, 
com::sun::star::uno::Reference<com::sun::star::frame::XDispatchResultListener> 
const&) at comphelper/source/misc/dispatchcommand.cxx:76
     #84 UITest::executeCommand(rtl::OUString const&) at 
vcl/source/uitest/uitest.cxx:24 (discriminator 2)
     #85 (anonymous namespace)::UITestUnoObj::executeCommand(rtl::OUString 
const&) at vcl/source/uitest/uno/uitest_uno.cxx:63 (discriminator 1)
     #86 gcc3::callVirtualMethod(void*, unsigned int, void*, 
_typelib_TypeDescriptionReference*, bool, unsigned long*, unsigned int, 
unsigned long*, double*) at 
bridges/source/cpp_uno/gcc3_linux_x86-64/callvirtualmethod.cxx:87
     #87 cpp_call(bridges::cpp_uno::shared::UnoInterfaceProxy*, 
bridges::cpp_uno::shared::VtableSlot, _typelib_TypeDescriptionReference*, int, 
_typelib_MethodParameter*, void*, void**, _uno_Any**) at 
bridges/source/cpp_uno/gcc3_linux_x86-64/uno2cpp.cxx:229
     #88 unoInterfaceProxyDispatch at 
bridges/source/cpp_uno/gcc3_linux_x86-64/uno2cpp.cxx:409
     #89 binaryurp::IncomingRequest::execute_throw(binaryurp::BinaryAny*, 
std::vector<binaryurp::BinaryAny, std::allocator<binaryurp::BinaryAny> >*) 
const at binaryurp/source/incomingrequest.cxx:239
     #90 binaryurp::IncomingRequest::execute() const at 
binaryurp/source/incomingrequest.cxx:79 (discriminator 1)
     #91 request at binaryurp/source/reader.cxx:84
     #92 cppu_threadpool::JobQueue::enter(void const*, bool) at 
cppu/source/threadpool/jobqueue.cxx:101
     #93 cppu_threadpool::ORequestThread::run() at 
cppu/source/threadpool/thread.cxx:169
     #94 threadFunc at include/osl/thread.hxx:190
     #95 osl_thread_start_Impl(void*) at sal/osl/unx/thread.cxx:245
     #96 start_thread at ./nptl/./nptl/pthread_create.c:444
     #97 clone3 at ./misc/../sysdeps/unix/sysv/linux/x86_64/clone3.S:80
    
    Change-Id: I5f1db80acaf4e9a5ad642baa7061d50af071ad5e
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/165434
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/sw/source/uibase/inc/redlndlg.hxx 
b/sw/source/uibase/inc/redlndlg.hxx
index d3944e9f81d9..6330d194fb13 100644
--- a/sw/source/uibase/inc/redlndlg.hxx
+++ b/sw/source/uibase/inc/redlndlg.hxx
@@ -131,6 +131,7 @@ class SwModelessRedlineAcceptDlg final : public 
SfxModelessDialogController
     std::unique_ptr<weld::Container> m_xContentArea;
     std::unique_ptr<SwRedlineAcceptDlg> m_xImplDlg;
     SwChildWinWrapper*      m_pChildWin;
+    bool mbInDestruction = false;
 
 public:
     SwModelessRedlineAcceptDlg(SfxBindings*, SwChildWinWrapper*, weld::Window 
*pParent);
diff --git a/sw/source/uibase/misc/redlndlg.cxx 
b/sw/source/uibase/misc/redlndlg.cxx
index 84fc6520546f..6badb7778db6 100644
--- a/sw/source/uibase/misc/redlndlg.cxx
+++ b/sw/source/uibase/misc/redlndlg.cxx
@@ -90,6 +90,9 @@ SwModelessRedlineAcceptDlg::SwModelessRedlineAcceptDlg(
 
 void SwModelessRedlineAcceptDlg::Activate()
 {
+    if (mbInDestruction)
+        return;
+
     SwView *pView = ::GetActiveView();
     if (!pView) // can happen when switching to another app, when a Listbox in 
dialog
         return; // had the focus previously (actually THs Bug)
@@ -138,6 +141,7 @@ void SwModelessRedlineAcceptDlg::FillInfo(SfxChildWinInfo& 
rInfo) const
 
 SwModelessRedlineAcceptDlg::~SwModelessRedlineAcceptDlg()
 {
+    mbInDestruction = true;
 }
 
 SwRedlineAcceptDlg::SwRedlineAcceptDlg(std::shared_ptr<weld::Window> xParent, 
weld::Builder *pBuilder,

Reply via email to