Bug 155235 - Draw crashes on close: SIGSEGV in SalInstance:GetYieldMutex()
Summary: Draw crashes on close: SIGSEGV in SalInstance:GetYieldMutex()
Status: VERIFIED FIXED
Alias: None
Product: LibreOffice
Classification: Unclassified
Component: Draw (show other bugs)
Version:
(earliest affected)
7.6.0.0 alpha0+
Hardware: x86-64 (AMD64) Linux (All)
: medium critical
Assignee: Not Assigned
URL:
Whiteboard: target:7.6.0
Keywords: haveBacktrace
: 155556 (view as bug list)
Depends on:
Blocks: Crash Exit
  Show dependency treegraph
 
Reported: 2023-05-10 16:06 UTC by Stéphane Guillou (stragu)
Modified: 2023-05-30 13:28 UTC (History)
5 users (show)

See Also:
Crash report or crash signature:


Attachments
bt with debug symbols (11.49 KB, text/plain)
2023-05-19 16:43 UTC, Julien Nabet
Details
bt with debug symbols (from throwing exception) (12.01 KB, text/plain)
2023-05-19 16:51 UTC, Julien Nabet
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Stéphane Guillou (stragu) 2023-05-10 16:06:08 UTC
Draw crashes when closing, as shown by crash report dialog at next launch, and Ubuntu Apport crash report.

Steps:
1. Open Draw
2. Close Draw
3. Start LO again: crash reporter appears.

Ubuntu 20.04 with GNOME 3.36.8
Version: 7.6.0.0.alpha0+ (X86_64) / LibreOffice Community
Build ID: 002ae41bb6088002ba3ed0188ac822fb823a23f9
CPU threads: 8; OS: Linux 5.15; UI render: default; VCL: gtk3
Locale: en-AU (en_AU.UTF-8); UI: en-US
Calc: threaded

Backtrace unpacked from Apport crash file:

Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00007f58497fd0a0 in SalInstance::GetYieldMutex() () from /opt/libreofficedev7.6/program/libmergedlo.so
(gdb) bt
#0  0x00007f58497fd0a0 in SalInstance::GetYieldMutex() ()
    at /opt/libreofficedev7.6/program/libmergedlo.so
#1  0x00007f5848b6917e in accessibility::AccessibleShapeTreeInfo::~AccessibleShapeTreeInfo() () at /opt/libreofficedev7.6/program/libmergedlo.so
#2  0x00007f5848b8e6b5 in accessibility::AccessibleShape::~AccessibleShape() ()
    at /opt/libreofficedev7.6/program/libmergedlo.so
#3  0x00007f5820d01a69 in  ()
    at /opt/libreofficedev7.6/program/../program/libsdlo.so
#4  0x00007f5843984e7a in cppu::WeakComponentImplHelperBase::release() ()
    at /opt/libreofficedev7.6/program/libuno_cppuhelpergcc3.so.3
#5  0x00007f583d49e3ce in  ()
    at /opt/libreofficedev7.6/program/libvclplug_gtk3lo.so
#6  0x00007f583d461348 in  ()
    at /opt/libreofficedev7.6/program/libvclplug_gtk3lo.so
#7  0x00007f5847ea99fe in  () at /opt/libreofficedev7.6/program/libmergedlo.so
#8  0x00007f5846b27fde in __cxa_finalize (d=0x7f584b242a80)
    at cxa_finalize.c:83
#9  0x00007f5847b153a3 in  () at /opt/libreofficedev7.6/program/libmergedlo.so
#10 0x00007ffccad62b80 in  ()
#11 0x00007f584b9aef6b in _dl_fini () at dl-fini.c:138

No crash with a debug build, so no symbols. No crash in bisect repo linux-64-7.6 at same commit.
Comment 1 Julien Nabet 2023-05-10 16:38:16 UTC
On pc Debian x86-64 with master sources updated today + gtk3 rendering, I don't reproduce this, perhaps already fixed with e4f5c7e3bf9a791ce777d1027aa17c93ad8f28a3 ?
(
tdf#155186 crash Inserting tables and switching slides (gtk3)
regression from

    commit 3b7db802731826b6cc3b55100470b0c61c1f2dfa
    Author: Noel Grandin <noel.grandin@collabora.co.uk>
    Date:   Thu May 4 10:06:14 2023 +0200
    tdf#105404 [API CHANGE] add index to accessiblity change event

where something is forgetting to send events for some of the changes, so
just ignore a bad indexhint here)
Comment 2 Dave Gilbert 2023-05-10 17:19:40 UTC
I don't think that's the fix, I'm still hitting it on the current head ba0bf0ab2c24d309e8a938cec26daa41eba9c8cf  which looks like it has that patch?

Here's my backtrace which looks similar.
I got this (on Fedora 38 x86) starting with --impress and chosing the first template (beehive?) and then closing the window.

(gdb) where
#0  SalInstance::GetYieldMutex() (this=0x0) at /usr/include/c++/13/bits/unique_ptr.h:199
#1  0x00007ff5bd6ac626 in Application::GetSolarMutex() () at /discs/fast/core/vcl/source/app/svapp.cxx:481
#2  0x00007ff5bf57c17e in SolarMutexGuard::SolarMutexGuard() (this=<synthetic pointer>) at /discs/fast/core/include/vcl/svapp.hxx:1366
#3  accessibility::AccessibleShapeTreeInfo::~AccessibleShapeTreeInfo() (this=this@entry=0x2706e88, __in_chrg=<optimized out>) at /discs/fast/core/svx/source/accessibility/AccessibleShapeTreeInfo.cxx:77
#4  0x00007ff5bf57430e in accessibility::AccessibleShape::~AccessibleShape() (this=0x2706d80, __in_chrg=<optimized out>) at /discs/fast/core/svx/source/accessibility/AccessibleShape.cxx:118
#5  0x00007ff5bf574379 in accessibility::AccessibleShape::~AccessibleShape() (this=0x2706d80, __in_chrg=<optimized out>) at /discs/fast/core/svx/source/accessibility/AccessibleShape.cxx:118
#6  0x00007ff5a9ee703e in com::sun::star::uno::Reference<com::sun::star::uno::XInterface>::~Reference() (this=0x4e697c8, __in_chrg=<optimized out>) at /discs/fast/core/include/com/sun/star/uno/Reference.hxx:114
#7  std::_Destroy<com::sun::star::uno::Reference<com::sun::star::uno::XInterface> >(com::sun::star::uno::Reference<com::sun::star::uno::XInterface>*) (__pointer=0x4e697c8) at /usr/include/c++/13/bits/stl_construct.h:151
#8  std::_Destroy_aux<false>::__destroy<com::sun::star::uno::Reference<com::sun::star::uno::XInterface>*>(com::sun::star::uno::Reference<com::sun::star::uno::XInterface>*, com::sun::star::uno::Reference<com::sun::star::uno::XInterface>*) (__last=0x4e697e8, __first=0x4e697c8) at /usr/include/c++/13/bits/stl_construct.h:163
#9  std::_Destroy<com::sun::star::uno::Reference<com::sun::star::uno::XInterface>*>(com::sun::star::uno::Reference<com::sun::star::uno::XInterface>*, com::sun::star::uno::Reference<com::sun::star::uno::XInterface>*)
    (__last=0x4e697e8, __first=<optimized out>) at /usr/include/c++/13/bits/stl_construct.h:196
#10 std::_Destroy<com::sun::star::uno::Reference<com::sun::star::uno::XInterface>*, com::sun::star::uno::Reference<com::sun::star::uno::XInterface> >(com::sun::star::uno::Reference<com::sun::star::uno::XInterface>*, com::sun::star::uno::Reference<com::sun::star::uno::XInterface>*, std::allocator<com::sun::star::uno::Reference<com::sun::star::uno::XInterface> >&) (__last=0x4e697e8, __first=<optimized out>) at /usr/include/c++/13/bits/alloc_traits.h:947
#11 std::vector<com::sun::star::uno::Reference<com::sun::star::uno::XInterface>, std::allocator<com::sun::star::uno::Reference<com::sun::star::uno::XInterface> > >::~vector() (this=0x2c7e0d0, __in_chrg=<optimized out>)
    at /usr/include/c++/13/bits/stl_vector.h:730
#12 o3tl::sorted_vector<com::sun::star::uno::Reference<com::sun::star::uno::XInterface>, std::less<com::sun::star::uno::Reference<com::sun::star::uno::XInterface> >, o3tl::find_unique, true>::~sorted_vector()
    (this=0x2c7e0d0, __in_chrg=<optimized out>) at /discs/fast/core/include/o3tl/sorted_vector.hxx:39
#13 DocumentFocusListener::~DocumentFocusListener() (this=0x2c7e0a0, __in_chrg=<optimized out>) at /discs/fast/core/vcl/inc/unx/gtk/gtkdata.hxx:221
#14 DocumentFocusListener::~DocumentFocusListener() (this=0x2c7e0a0, __in_chrg=<optimized out>) at /discs/fast/core/vcl/inc/unx/gtk/gtkdata.hxx:221
#15 0x00007ff5c104c37e in com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>::~Reference() (this=0x25f9e80, __in_chrg=<optimized out>) at /discs/fast/core/include/com/sun/star/uno/Reference.hxx:114
#16 std::_Destroy<com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener> >(com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>*) (__pointer=0x25f9e80)
    at /usr/include/c++/13/bits/stl_construct.h:151
#17 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>*) (__last=0x25f9e88, __first=0x25f9e80) at /usr/include/c++/13/bits/stl_construct.h:163
#18 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>*) (__last=0x25f9e88, __first=<optimized out>) at /usr/include/c++/13/bits/stl_construct.h:196
#19 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=0x25f9e88, __first=<optimized out>) at /usr/include/c++/13/bits/alloc_traits.h:947
#20 std::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=0x4e69620, __in_chrg=<optimized out>) at /usr/include/c++/13/bits/stl_vector.h:730
#21 o3tl::cow_wrapper<std::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=0x4e69620, __in_chrg=<optimized out>) at /discs/fast/core/include/o3tl/cow_wrapper.hxx:176
#22 o3tl::cow_wrapper<std::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=0x4e70610) at /discs/fast/core/include/o3tl/cow_wrapper.hxx:207
#23 o3tl::cow_wrapper<std::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=0x4e70610) at /discs/fast/core/include/o3tl/cow_wrapper.hxx:203
#24 o3tl::cow_wrapper<std::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=0x4e70610, __in_chrg=<optimized out>) at /discs/fast/core/include/o3tl/cow_wrapper.hxx:271
#25 comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener>::~OInterfaceContainerHelper4() (this=0x4e70610, __in_chrg=<optimized out>)
    at /discs/fast/core/include/comphelper/interfacecontainer4.hxx:126
#26 std::pair<unsigned int const, comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener> >::~pair() (this=0x4e70608, __in_chrg=<optimized out>) at /usr/include/c++/13/bits/stl_pair.h:187
#27 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=0x4e70608, this=0x7ff5c1184520 <(anonymous namespace)::gaClients>) at /usr/include/c++/13/bits/new_allocator.h:194
#28 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 int 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=0x4e70608, __a=...)
    at /usr/include/c++/13/bits/alloc_traits.h:557
#29 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=0x7ff5c1184520 <(anonymous namespace)::gaClients>, __n=0x4e70600)
    at /usr/include/c++/13/bits/hashtable_policy.h:2020
#30 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>*) (__n=0x0, this=0x7ff5c1184520 <(anonymous namespace)::gaClients>)
    at /usr/include/c++/13/bits/hashtable_policy.h:2042
#31 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=0x7ff5c1184520 <(anonymous namespace)::gaClients>) at /usr/include/c++/13/bits/hashtable.h:2509
#32 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> >::~_Hashtable() (this=0x7ff5c1184520 <(anonymous namespace)::gaClients>, __in_chrg=<optimized out>) at /usr/include/c++/13/bits/hashtable.h:1593
#33 std::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> > > >::~unordered_map() (this=0x7ff5c1184520 <(anonymous namespace)::gaClients>, __in_chrg=<optimized out>)
    at /usr/include/c++/13/bits/unordered_map.h:107
#34 0x00007ff5c1b4abfd in __cxa_finalize () at /lib64/libc.so.6
#35 0x00007ff5c1018c37 in __do_global_dtors_aux () at /discs/fast/core/instdir/program/libcomphelper.so
#36 0x00007ffd9bc01ca0 in  ()
#37 0x00007ff5c1e800f2 in _dl_call_fini (closure_map=0x7ff5c1a74540) at dl-call_fini.c:43
Comment 3 Julien Nabet 2023-05-10 17:24:02 UTC
Noel: thought you might be interested in this one.
Comment 4 Dave Gilbert 2023-05-11 01:21:41 UTC
This bug disappears for me if I switch from gtk to Qt.
It also disappears if run under valgrind.

(Marking new since I seem to be the 2nd person)
Comment 5 Commit Notification 2023-05-11 08:50:29 UTC
Noel Grandin committed a patch related to this issue.
It has been pushed to "master":

https://git.libreoffice.org/core/commit/d309298d1f70f4ffbf699b1aa1b2bfe08be8c4ef

tdf#155235 Draw crashes on close: SIGSEGV in SalInstance:GetYieldMutex()

It will be available in 7.6.0.

The patch should be included in the daily builds available at
https://dev-builds.libreoffice.org/daily/ in the next 24-48 hours. More
information about daily builds can be found at:
https://wiki.documentfoundation.org/Testing_Daily_Builds

Affected users are encouraged to test the fix and report feedback.
Comment 6 Stéphane Guillou (stragu) 2023-05-12 08:58:29 UTC
Verified the fix in :

Version: 7.6.0.0.alpha1+ (X86_64) / LibreOffice Community
Build ID: 99a88c9e55872214ce01d89447d18708e47e956b
CPU threads: 8; OS: Linux 5.15; UI render: default; VCL: gtk3
Locale: en-AU (en_AU.UTF-8); UI: en-US
Calc: threaded

Thanks Noel!
Comment 7 Dave Gilbert 2023-05-18 17:46:27 UTC
I'm still seeing a crash on exit here, but it's moved to a different accessibility object, perhaps they need hitting with the same hammer:

#0  SalInstance::GetYieldMutex() (this=0x0) at /usr/include/c++/13/bits/unique_ptr.h:199
#1  0x00007f97f78ae176 in Application::GetSolarMutex() () at /discs/fast/core/vcl/source/app/svapp.cxx:481
#2  0x00007f97e40e8b3e in SolarMutexGuard::SolarMutexGuard() (this=<synthetic pointer>) at /discs/fast/core/include/vcl/svapp.hxx:1365
#3  atk_object_wrapper_finalize(GObject*) (obj=0x3d947c0) at /discs/fast/core/vcl/unx/gtk3/a11y/atkwrapper.cxx:662
#4  0x00007f97f407ca53 in g_object_unref (_object=0x3d947c0) at ../gobject/gobject.c:3938
#5  g_object_unref (_object=0x3d947c0) at ../gobject/gobject.c:3802
#6  0x00007f97e40d97cb in AtkListener::~AtkListener() (this=0x3d8d180, __in_chrg=<optimized out>) at /discs/fast/core/vcl/unx/gtk3/a11y/atklistener.cxx:57
#7  0x00007f97e40d9839 in AtkListener::~AtkListener() (this=0x3d8d180, __in_chrg=<optimized out>) at /discs/fast/core/vcl/unx/gtk3/a11y/atklistener.cxx:58
#8  0x00007f97fb0cb40e in com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>::~Reference()
    (this=0x3e5bf48, __in_chrg=<optimized out>) at /discs/fast/core/include/com/sun/star/uno/Reference.hxx:114
#9  std::_Destroy<com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener> >(com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleEventListener>*) (__pointer=0x3e5bf48) at /usr/include/c++/13/bits/stl_construct.h:151
#10 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>*)
    (__last=0x3e5bf50, __first=0x3e5bf48) at /usr/include/c++/13/bits/stl_construct.h:163
#11 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>*)
    (__last=0x3e5bf50, __first=<optimized out>) at /usr/include/c++/13/bits/stl_construct.h:196
#12 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=0x3e5bf50, __first=<optimized out>) at /usr/include/c++/13/bits/alloc_traits.h:947
#13 std::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=0x4e35f60, __in_chrg=<optimized out>) at /usr/include/c++/13/bits/stl_vector.h:732
#14 o3tl::cow_wrapper<std::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=0x4e35f60, __in_chrg=<optimized out>) at /discs/fast/core/include/o3tl/cow_wrapper.hxx:176
#15 o3tl::cow_wrapper<std::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=0x27802d0)
    at /discs/fast/core/include/o3tl/cow_wrapper.hxx:207
#16 o3tl::cow_wrapper<std::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=0x27802d0)
    at /discs/fast/core/include/o3tl/cow_wrapper.hxx:203
--Type <RET> for more, q to quit, c to continue without paging--
#17 o3tl::cow_wrapper<std::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=0x27802d0, __in_chrg=<optimized out>)
    at /discs/fast/core/include/o3tl/cow_wrapper.hxx:271
#18 comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener>::~OInterfaceContainerHelper4() (this=0x27802d0, __in_chrg=<optimized out>)
    at /discs/fast/core/include/comphelper/interfacecontainer4.hxx:126
#19 std::pair<unsigned int const, comphelper::OInterfaceContainerHelper4<com::sun::star::accessibility::XAccessibleEventListener> >::~pair()
    (this=0x27802c8, __in_chrg=<optimized out>) at /usr/include/c++/13/bits/stl_pair.h:187
#20 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=0x27802c8, this=0x7f97fb203520 <(anonymous namespace)::gaClients>)
    at /usr/include/c++/13/bits/new_allocator.h:194
#21 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 int 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=0x27802c8, __a=...)
    at /usr/include/c++/13/bits/alloc_traits.h:557
#22 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=0x7f97fb203520 <(anonymous namespace)::gaClients>, __n=0x27802c0) at /usr/include/c++/13/bits/hashtable_policy.h:2020
#23 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>*) (__n=0x31eaac0, this=0x7f97fb203520 <(anonymous namespace)::gaClients>) at /usr/include/c++/13/bits/hashtable_policy.h:2042
#24 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=0x7f97fb203520 <(anonymous namespace)::gaClients>) at /usr/include/c++/13/bits/hashtable.h:2509
#25 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> >::~_Hashtable() (this=0x7f97fb203520 <(anonymous namespace)::gaClients>, __in_chrg=<optimized out>) at /usr/include/c++/13/bits/hashtable.h:1593
#26 std::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> > > >::~unordered_map()
    (this=0x7f97fb203520 <(anonymous namespace)::gaClients>, __in_chrg=<optimized out>) at /usr/include/c++/13/bits/unordered_map.h:109
#27 0x00007f97fbc89bfd in __cxa_finalize (d=0x7f97fb1f2840) at cxa_finalize.c:82
#28 0x00007f97fb097c77 in __do_global_dtors_aux () at /discs/fast/core/instdir/program/libcomphelper.so
#29 0x00007ffde8aa3550 in  ()
#30 0x00007f97fbfbf0f2 in _dl_call_fini (closure_map=0x7f97fb7fe540) at dl-call_fini.c:43
Comment 8 Noel Grandin 2023-05-19 06:19:08 UTC
(In reply to Dave Gilbert from comment #7)
> I'm still seeing a crash on exit here, but it's moved to a different
> accessibility object, perhaps they need hitting with the same hammer:
> 

Do you know what you're doing to trigger this?
Comment 9 Dave Gilbert 2023-05-19 10:35:38 UTC
(In reply to Noel Grandin from comment #8)
> (In reply to Dave Gilbert from comment #7)
> > I'm still seeing a crash on exit here, but it's moved to a different
> > accessibility object, perhaps they need hitting with the same hammer:
> > 
> 
> Do you know what you're doing to trigger this?

Hmm it's not as easy as the old version.  But this seems repeatable:

soffice --impress
chose the first 'beehive' template
right click on the 1st slide in the thumbnails on the left, and duplicate
close the window with alt-f4 (window manager close)
Select 'dont save'
*crash*
Comment 10 Stéphane Guillou (stragu) 2023-05-19 15:20:35 UTC
(In reply to Dave Gilbert from comment #9)
> soffice --impress
> chose the first 'beehive' template
> right click on the 1st slide in the thumbnails on the left, and duplicate
> close the window with alt-f4 (window manager close)
> Select 'dont save'
> *crash*

Reproduced as well with a build from today, thanks for the steps.

Version: 7.6.0.0.alpha1+ (X86_64) / LibreOffice Community
Build ID: 261063e69e80193ad563e086c515fd6e22e48464
CPU threads: 8; OS: Linux 5.15; UI render: default; VCL: gtk3
Locale: en-AU (en_AU.UTF-8); UI: en-US
Calc: threaded

Even simpler steps:

1. Open impress
2. Pick Beehive template
3. Select slide 2 in slide picker
4. Close
Comment 11 Julien Nabet 2023-05-19 16:43:19 UTC
Created attachment 187403 [details]
bt with debug symbols

On pc Debian x86-64 with master sources updated today, I could reproduce this by following Stephane's comment 10.
Comment 12 Julien Nabet 2023-05-19 16:47:13 UTC
Here are the last messages on console:
warn:vcl:23297:23297:vcl/unx/gtk3/a11y/atklistener.cxx:215: index hint out of range, ignoring
warn:vcl:23297:23297:vcl/unx/gtk3/a11y/atklistener.cxx:215: index hint out of range, ignoring
warn:sd:23297:23297:sd/source/ui/unoidl/DrawController.cxx:783: Calling disposed DrawController object. Throwing exception:
warn:svl.items:23297:23297:svl/source/items/itempool.cxx:442: old secondary pool: EditEngineItemPool of pool: XOutdevItemPool must be empty.
warn:vcl.schedule.deinit:23297:23297:vcl/source/app/scheduler.cxx:176: DeInit task: Timer a: 1 p: 1 drawinglayer ImpTimedRefDev destroy mpVirDev 180000ms (0x560ba6fadeb0)
warn:vcl.schedule.deinit:23297:23297:vcl/source/app/scheduler.cxx:176: DeInit task: Timer a: 1 p: 1 graphic::Manager maSwapOutTimer 10000ms (0x7f7113774710)
warn:vcl.schedule.deinit:23297:23297:vcl/source/app/scheduler.cxx:197: DeInit active tasks: 2 (ignored: 0)
Comment 13 Julien Nabet 2023-05-19 16:51:03 UTC
Created attachment 187404 [details]
bt with debug symbols (from throwing exception)

From warn:sd:23297:23297:sd/source/ui/unoidl/DrawController.cxx:783: Calling disposed DrawController object. Throwing exception:
Comment 14 Julien Nabet 2023-05-19 17:06:06 UTC
I tried this patch but no better:
diff --git a/sd/source/ui/unoidl/DrawController.cxx b/sd/source/ui/unoidl/DrawController.cxx
index 3dd4c4c65478..7b0271b25e70 100644
--- a/sd/source/ui/unoidl/DrawController.cxx
+++ b/sd/source/ui/unoidl/DrawController.cxx
@@ -151,10 +151,10 @@ void SAL_CALL DrawController::dispose()
         mpBase->GetViewShellManager()->Shutdown();
     }
 
-    OPropertySetHelper::disposing();
-
     DisposeFrameworkControllers();
 
+    OPropertySetHelper::disposing();
+
     SfxBaseController::dispose();
 }
 since in the ctr OPropertySetHelper is initialized before FrameworkControllers and disposing or calling destructor should call the same but in reverse order.
Comment 15 Commit Notification 2023-05-23 14:05:05 UTC
Noel Grandin committed a patch related to this issue.
It has been pushed to "master":

https://git.libreoffice.org/core/commit/1ed765c818af2186e459c5ad0eff24dc39a20d34

tdf#155235 workaround gtk3 accessiblibility crashes on close

It will be available in 7.6.0.

The patch should be included in the daily builds available at
https://dev-builds.libreoffice.org/daily/ in the next 24-48 hours. More
information about daily builds can be found at:
https://wiki.documentfoundation.org/Testing_Daily_Builds

Affected users are encouraged to test the fix and report feedback.
Comment 16 Stéphane Guillou (stragu) 2023-05-25 11:47:26 UTC
(In reply to Stéphane Guillou (stragu) from comment #10)
> Even simpler steps:
> 
> 1. Open impress
> 2. Pick Beehive template
> 3. Select slide 2 in slide picker
> 4. Close

Can't reproduce anymore with the steps above and:

Version: 7.6.0.0.alpha1+ (X86_64) / LibreOffice Community
Build ID: f3aab159f1c1e00c25e6b4ca1e50813bc343f4f3
CPU threads: 8; OS: Linux 5.15; UI render: default; VCL: gtk3
Locale: en-AU (en_AU.UTF-8); UI: en-US
Calc: threaded

Thanks Julien.
I'm still getting some exit crashes in other modules, but will report separately if I find a way to reproduce consistently.
Comment 17 Xisco Faulí 2023-05-30 13:28:31 UTC
*** Bug 155556 has been marked as a duplicate of this bug. ***