sfx2/source/control/unoctitm.cxx | 5 +++++ 1 file changed, 5 insertions(+)
New commits: commit a023a967978a334fd5016ab325864796def295cc Author: Miklos Vajna <vmik...@collabora.com> AuthorDate: Mon Jul 12 16:47:51 2021 +0200 Commit: Miklos Vajna <vmik...@collabora.com> CommitDate: Mon Jul 12 20:19:10 2021 +0200 sfx2: fix assert failure when deleting SfxOfficeDispatch on a thread Steps to reproduce the problem: 1) Start soffice with "--accept=socket,host=localhost,port=9999;urp;StarOffice.ServiceManager" 2) Run a java / uno example that registers a custom dispatch interceptor by calling registerDispatchProviderInterceptor(). 3) Open a Writer document, choose insert -> object -> ole object -> spreadsheet (i.e. Calc) Then this assertion failure is hit: tllo.dll!DbgTestSolarMutex() Line 96 at C:\lo\master\tools\source\debug\debug.cxx(96) svllo.dll!SfxBroadcaster::RemoveListener(SfxListener & rListener) Line 104 at C:\lo\master\svl\source\notify\SfxBroadcaster.cxx(104) svllo.dll!SfxListener::~SfxListener() Line 54 at C:\lo\master\svl\source\notify\lstner.cxx(54) sfxlo.dll!SfxDispatchController_Impl::~SfxDispatchController_Impl() Line 367 at C:\lo\master\sfx2\source\control\unoctitm.cxx(367) sfxlo.dll!SfxOfficeDispatch::~SfxOfficeDispatch() Line 192 at C:\lo\master\sfx2\source\control\unoctitm.cxx(192) Given that SfxListener wants its caller to lock the solar mutex and SfxDispatchController_Impl inherits from SfxListener, lock the mutex in the SfxOfficeDispatch dtor and explicitly delete SfxDispatchController_Impl while the mutex is still locked. Change-Id: Ib4201ef7866aaadedf9dfa8bd581ebe7a3bcf29a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/118769 Reviewed-by: Miklos Vajna <vmik...@collabora.com> Tested-by: Jenkins diff --git a/sfx2/source/control/unoctitm.cxx b/sfx2/source/control/unoctitm.cxx index 58bdc6179008..0a98f806d708 100644 --- a/sfx2/source/control/unoctitm.cxx +++ b/sfx2/source/control/unoctitm.cxx @@ -185,6 +185,11 @@ SfxOfficeDispatch::~SfxOfficeDispatch() { // when dispatch object is released, destroy its connection to this object and destroy it pImpl->UnBindController(); + + // Ensure that SfxDispatchController_Impl is deleted while the solar mutex is locked, since + // that derives from SfxListener. + SolarMutexGuard aGuard; + pImpl.reset(); } } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits