svx/source/dialog/frmsel.cxx |    5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

New commits:
commit 912374164f16a4157f04c74994e15f8658b37f03
Author:     Michael Weghorn <m.wegh...@posteo.de>
AuthorDate: Fri Aug 18 20:02:17 2023 +0200
Commit:     Michael Weghorn <m.wegh...@posteo.de>
CommitDate: Fri Aug 18 22:20:45 2023 +0200

    svx: Use FRAMEBORDERTYPE_COUNT instead of magic number
    
    ... just as is used for `maAllBorders` below.
    
    Change-Id: I0741a039cc0ee9ad01055414f471dab45f420ed6
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/155849
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <m.wegh...@posteo.de>

diff --git a/svx/source/dialog/frmsel.cxx b/svx/source/dialog/frmsel.cxx
index 55e73043044b..1fde68ed7c0d 100644
--- a/svx/source/dialog/frmsel.cxx
+++ b/svx/source/dialog/frmsel.cxx
@@ -238,7 +238,7 @@ FrameSelectorImpl::FrameSelectorImpl( FrameSelector& 
rFrameSel ) :
     mbAutoSelect( true ),
     mbHCMode( false )
 #if !ENABLE_WASM_STRIP_ACCESSIBILITY
-    ,maChildVec( 8 )
+    ,maChildVec(FRAMEBORDERTYPE_COUNT)
 #endif
 {
     maAllBorders.resize( FRAMEBORDERTYPE_COUNT, nullptr );
commit 79cc574270582d03408286544d99227881f13bb8
Author:     Michael Weghorn <m.wegh...@posteo.de>
AuthorDate: Fri Aug 18 18:00:17 2023 +0200
Commit:     Michael Weghorn <m.wegh...@posteo.de>
CommitDate: Fri Aug 18 22:20:37 2023 +0200

    related tdf#156683 a11y: Dispose FrameSelectorImpl a11y children
    
    Don't just invalidate, but also dispose the a11y children
    in `FrameSelectorImpl::~FrameSelectorImpl`.
    
    This fixes a crash on exit that's reproducible with
    the gtk3 VCL plugin e.g. like this (maybe some
    steps aren't even needed):
    
    1) start LO Writer with the gtk3 VCL plugin
    2) right-click, select "Character" > "Character"
       in context menu
    3) switch to "Font Effects" tab
    4) press space key with focus in the font color combobox
       to open the popup
    5) use Tab key to get to the view of colors
    6) move around with arrow keys a bit
    7) close the dialog and Writer
    
    Reverse-continuing to `atk_object_wrapper_dispose`
    (frame #10 in the below backtrace) in rr
    showed the involved a11y object:
    
        uno::Reference to (svx::a11y::AccFrameSelectorChild *) 0x5557832b9150
    
    Backtrace (somewhat similar to the one in tdf#156683):
    
        #0  0x00007ffff6b15cd6 in 
comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener>::disposeAndClear(std::unique_lock<std::mutex>&,
 com::sun::star::lang::EventObject const&)
            (this=0x7fffffffca88, rGuard=..., rEvt=...) at 
.../include/comphelper/interfacecontainer4.hxx:397
        #1  0x00007ffff6b13c6f in 
comphelper::AccessibleEventNotifier::revokeClientNotifyDisposing(unsigned int, 
com::sun::star::uno::Reference<com::sun::star::uno::XInterface> const&)
            (_nClient=1058, _rxEventSource=uno::Reference to 
(svx::a11y::AccFrameSelectorChild *) 0x55555cecfdf0) at 
.../comphelper/source/misc/accessibleeventnotifier.cxx:204
        #2  0x00007ffff6b1028a in 
comphelper::OCommonAccessibleComponent::disposing() (this=0x55555cecfdf0) at 
.../comphelper/source/misc/accessiblecomponenthelper.cxx:61
        #3  0x00007ffff6674aeb in cppu::WeakComponentImplHelperBase::dispose() 
(this=0x55555cecfdf0) at .../cppuhelper/source/implbase.cxx:104
        #4  0x00007ffff2ddf0e0 in 
cppu::PartialWeakComponentImplHelper<com::sun::star::accessibility::XAccessibleContext2,
 com::sun::star::accessibility::XAccessibleEventBroadcaster>::dispose() 
(this=0x55555cecfdf0)
            at .../include/cppuhelper/compbase.hxx:90
        #5  0x00007ffff6674834 in cppu::WeakComponentImplHelperBase::release() 
(this=0x55555cecfdf0) at .../cppuhelper/source/implbase.cxx:79
        #6  0x00007ffff2ddf642 in 
cppu::PartialWeakComponentImplHelper<com::sun::star::accessibility::XAccessibleContext2,
 com::sun::star::accessibility::XAccessibleEventBroadcaster>::release() 
(this=0x55555cecfdf0)
            at .../include/cppuhelper/compbase.hxx:86
        #7  0x00007ffff2ddf378 in 
cppu::ImplInheritanceHelper<comphelper::OCommonAccessibleComponent, 
com::sun::star::accessibility::XAccessibleComponent>::release() 
(this=0x55555cecfdf0)
            at .../include/cppuhelper/implbase.hxx:171
        #8  0x00007ffff2ddf0a0 in 
cppu::ImplInheritanceHelper<comphelper::OAccessibleComponentHelper, 
com::sun::star::accessibility::XAccessible>::release() (this=0x55555cecfdf0)
            at .../include/cppuhelper/implbase.hxx:171
        #9  0x00007fffe3f29535 in 
com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleContext>::clear()
 (this=0x55555d40a010) at .../include/com/sun/star/uno/Reference.hxx:231
        #10 0x00007fffe3f288de in atk_object_wrapper_dispose(AtkObjectWrapper*) 
(wrapper=0x55555d409fa0) at .../vcl/unx/gtk3/a11y/atkwrapper.cxx:1078
        #11 0x00007fffe3f27527 in atk_object_wrapper_finalize(GObject*) 
(obj=0x55555d409fa0) at .../vcl/unx/gtk3/a11y/atkwrapper.cxx:674
        #12 0x00007ffff138c48c in g_object_unref () at 
/lib/x86_64-linux-gnu/libgobject-2.0.so.0
        #13 0x00007fffe3f003f7 in AtkListener::~AtkListener() 
(this=0x55555ce6ecb0, __in_chrg=<optimized out>) at 
.../vcl/unx/gtk3/a11y/atklistener.cxx:57
        #14 0x00007fffe3f0042e in AtkListener::~AtkListener() 
(this=0x55555ce6ecb0, __in_chrg=<optimized out>) at 
.../vcl/unx/gtk3/a11y/atklistener.cxx:58
        #15 0x00007ffff6756838 in cppu::OWeakObject::release() 
(this=0x55555ce6ecb0) at .../cppuhelper/source/weak.cxx:230
        #16 0x00007fffe3f0a7de in 
cppu::WeakImplHelper<com::sun::star::accessibility::XAccessibleEventListener>::release()
 (this=0x55555ce6ecb0) at .../include/cppuhelper/implbase.hxx:115
        #17 0x00007ffff6b21b99 in 
com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>::~Reference()
 (this=0x55555d40a0c0, __in_chrg=<optimized out>)
            at .../include/com/sun/star/uno/Reference.hxx:114
        #18 0x00007ffff6b217a9 in 
std::_Destroy<com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>
 
>(com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>*)
            (__pointer=0x55555d40a0c0) at 
/usr/include/c++/13/bits/stl_construct.h:151
        #19 0x00007ffff6b20bcf in 
std::_Destroy_aux<false>::__destroy<com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>*>(com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>*,
 
com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>*)
 (__first=0x55555d40a0c0, __last=0x55555d40a0c8) at 
/usr/include/c++/13/bits/stl_construct.h:163
        #20 0x00007ffff6b1f105 in 
std::_Destroy<com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>*>(com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>*,
 
com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>*)
 (__first=0x55555d40a0c0, __last=0x55555d40a0c8) at 
/usr/include/c++/13/bits/stl_construct.h:196
        #21 0x00007ffff6b197aa in 
std::_Destroy<com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>*,
 
com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>
 
>(com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>*,
 
com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>*,
 
std::allocator<com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>
 >&) (__last=0x55555d40a0c8, __first=0x55555d40a0c0) at 
/usr/include/c++/13/bits/alloc_traits.h:947
        #22 
std::__cxx1998::vector<com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>,
 
std::allocator<com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>
 > >::~vector()
            (this=0x55555cf22af8, __in_chrg=<optimized out>) at 
/usr/include/c++/13/bits/stl_vector.h:732
        #23 0x00007ffff6b17402 in 
std::__debug::vector<com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>,
 
std::allocator<com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>
 > >::~vector() (this=0x55555cf22ae0, __in_chrg=<optimized out>) at 
/usr/include/c++/13/debug/vector:230
        #24 0x00007ffff6b1742a in 
o3tl::cow_wrapper<std::__debug::vector<com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>,
 
std::allocator<com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>
 > >, o3tl::ThreadSafeRefCountingPolicy>::impl_t::~impl_t() 
(this=0x55555cf22ae0, __in_chrg=<optimized out>) at 
.../include/o3tl/cow_wrapper.hxx:176
        #25 0x00007ffff6b17485 in 
o3tl::cow_wrapper<std::__debug::vector<com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>,
 
std::allocator<com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>
 > >, o3tl::ThreadSafeRefCountingPolicy>::release() (this=0x55555d40a0b0) at 
.../include/o3tl/cow_wrapper.hxx:207
        #26 0x00007ffff6b15700 in 
o3tl::cow_wrapper<std::__debug::vector<com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>,
 
std::allocator<com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>
 > >, o3tl::ThreadSafeRefCountingPolicy>::~cow_wrapper() (this=0x55555d40a0b0, 
__in_chrg=<optimized out>) at .../include/o3tl/cow_wrapper.hxx:271
        #27 0x00007ffff6b145b4 in 
comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener>::~OInterfaceContainerHelper4()
 (this=0x55555d40a0b0, __in_chrg=<optimized out>)
            at .../include/comphelper/interfacecontainer4.hxx:126
        #28 0x00007ffff6b206c6 in std::pair<unsigned int const, 
comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener>
 >::~pair() (this=0x55555d40a0a8, __in_chrg=<optimized out>)
            at /usr/include/c++/13/bits/stl_pair.h:187
        #29 0x00007ffff6b1aac4 in 
std::__new_allocator<std::__detail::_Hash_node<std::pair<unsigned int const, 
comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener>
 >, false> >::destroy<std::pair<unsigned int const, 
comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener>
 > >(std::pair<unsigned int const, 
comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener>
 >*) (__p=0x55555d40a0a8, this=0x7ffff6f64988 <(anonymous 
namespace)::gaClients+40>) at /usr/include/c++/13/bits/new_allocator.h:194
        #30 
std::allocator_traits<std::allocator<std::__detail::_Hash_node<std::pair<unsigned
 int const, 
comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener>
 >, false> > >::destroy<std::pair<unsigned i--Type <RET> for more, q to quit, c 
to continue without paging--
        nt const, 
comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener>
 > >(std::allocator<std::__detail::_Hash_node<std::pair<unsigned int const, 
comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener>
 >, false> >&, std::pair<unsigned int const, 
comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener>
 >*) (__p=0x55555d40a0a8, __a=...)
            at /usr/include/c++/13/bits/alloc_traits.h:557
        #31 
std::__detail::_Hashtable_alloc<std::allocator<std::__detail::_Hash_node<std::pair<unsigned
 int const, 
comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener>
 >, false> > >::_M_deallocate_node(std::__detail::_Hash_node<std::pair<unsigned 
int const, 
comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener>
 >, false>*)
            (this=0x7ffff6f64988 <(anonymous namespace)::gaClients+40>, 
__n=0x55555d40a0a0) at /usr/include/c++/13/bits/hashtable_policy.h:2020
        #32 0x00007ffff6b188b7 in 
std::__detail::_Hashtable_alloc<std::allocator<std::__detail::_Hash_node<std::pair<unsigned
 int const, 
comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener>
 >, false> > 
>::_M_deallocate_nodes(std::__detail::_Hash_node<std::pair<unsigned int const, 
comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener>
 >, false>*)
            (this=0x7ffff6f64988 <(anonymous namespace)::gaClients+40>, 
__n=0x55555d409ef0) at /usr/include/c++/13/bits/hashtable_policy.h:2042
        #33 0x00007ffff6b164e6 in std::_Hashtable<unsigned int, 
std::pair<unsigned int const, 
comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener>
 >, std::allocator<std::pair<unsigned int const, 
comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener>
 > >, std::__detail::_Select1st, std::equal_to<unsigned int>, 
std::hash<unsigned int>, std::__detail::_Mod_range_hashing, 
std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, 
std::__detail::_Hashtable_traits<false, false, true> >::clear() 
(this=0x7ffff6f64988 <(anonymous namespace)::gaClients+40>) at 
/usr/include/c++/13/bits/hashtable.h:2509
        #34 0x00007ffff6b187cc in std::__cxx1998::unordered_map<unsigned int, 
comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener>,
 std::hash<unsigned int>, std::equal_to<unsigned int>, 
std::allocator<std::pair<unsigned int const, 
comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener>
 > > >::clear() (this=0x7ffff6f64988 <(anonymous namespace)::gaClients+40>)
            at /usr/include/c++/13/bits/unordered_map.h:798
        #35 0x00007ffff6b164a0 in std::__debug::unordered_map<unsigned int, 
comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener>,
 std::hash<unsigned int>, std::equal_to<unsigned int>, 
std::allocator<std::pair<unsigned int const, 
comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener>
 > > >::clear() (this=0x7ffff6f64960 <(anonymous namespace)::gaClients>)
            at /usr/include/c++/13/debug/unordered_map:234
        #36 0x00007ffff6b14151 in 
comphelper::AccessibleEventNotifier::shutdown() () at 
.../comphelper/source/misc/accessibleeventnotifier.cxx:268
        #37 0x00007fffee53fa20 in DeInitVCL() () at 
.../vcl/source/app/svmain.cxx:594
        #38 0x00007fffee53e227 in ImplSVMain() () at 
.../vcl/source/app/svmain.cxx:229
        #39 0x00007fffee53e283 in SVMain() () at 
.../vcl/source/app/svmain.cxx:236
        #40 0x00007ffff7a9f51d in soffice_main() () at 
.../desktop/source/app/sofficemain.cxx:94
        #41 0x00005555555549d4 in sal_main () at 
.../desktop/source/app/main.c:51
        #42 0x00005555555549ba in main (argc=2, argv=0x7fffffffd8e8) at 
.../desktop/source/app/main.c:49
    
    Change-Id: I22c665f3c41624f4916b956ea266ff1d39fbe507
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/155848
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <m.wegh...@posteo.de>

diff --git a/svx/source/dialog/frmsel.cxx b/svx/source/dialog/frmsel.cxx
index 5f2ca0e4c718..55e73043044b 100644
--- a/svx/source/dialog/frmsel.cxx
+++ b/svx/source/dialog/frmsel.cxx
@@ -275,7 +275,10 @@ FrameSelectorImpl::~FrameSelectorImpl()
 #if !ENABLE_WASM_STRIP_ACCESSIBILITY
     for( auto& rpChild : maChildVec )
         if( rpChild.is() )
+        {
             rpChild->Invalidate();
+            rpChild->dispose();
+        }
 #endif
 }
 

Reply via email to