sfx2/source/view/viewsh.cxx | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-)
New commits: commit 4f9e06298fbababf761b33901313a8b16d181dc4 Author: Miklos Vajna <[email protected]> AuthorDate: Wed Dec 10 10:18:41 2025 +0100 Commit: Mike Kaganski <[email protected]> CommitDate: Fri Dec 12 04:49:07 2025 +0100 sfx2: fix uncaught exception in SfxViewShell::Activate() gdb backtrace on the core file from crashreport: #0 __pthread_kill_implementation (no_tid=0, signo=6, threadid=123946821978048) at ./nptl/pthread_kill.c:44 #1 __pthread_kill_internal (signo=6, threadid=123946821978048) at ./nptl/pthread_kill.c:78 #2 __GI___pthread_kill (threadid=123946821978048, signo=signo@entry=6) at ./nptl/pthread_kill.c:89 #3 0x000070ba9de42476 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26 #4 0x000070ba9de287f3 in __GI_abort () at ./stdlib/abort.c:79 #5 0x000070ba9e2a2b9e in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6 #6 0x000070ba9e2ae20c in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6 #7 0x000070ba9e2ae277 in std::terminate() () from /lib/x86_64-linux-gnu/libstdc++.so.6 #8 0x000070ba9e2ae4d8 in __cxa_throw () from /lib/x86_64-linux-gnu/libstdc++.so.6 #9 0x000070ba9818129b in SfxBaseModel::MethodEntryCheck (this=<optimized out>, i_mustBeInitialized=<optimized out>) at sfx2/source/doc/sfxbasemodel.cxx:3069 #10 0x000070ba99e6c8cb in SfxModelGuard::SfxModelGuard (i_eState=SfxModelGuard::E_FULLY_ALIVE, i_rModel=..., this=0x7ffedd2f94f0) at sfx2/source/inc/docundomanager.hxx:76 #11 SfxBaseModel::setCurrentController (this=0x194e84b0, xCurrentController=...) at sfx2/source/doc/sfxbasemodel.cxx:1364 #12 0x000070ba99f6955a in SfxViewShell::Activate (this=0x2b084ed0, bMDI=<optimized out>) at sfx2/source/view/viewsh.cxx:2535 And that std::terminate() prints: terminate called after throwing an instance of 'com::sun::star::lang::NotInitializedException' Fix the problem similar to what commit adadeaf98114ffdf9893e6c92a630f7e90597f62 (avoid terminate after unhandled exception, 2025-11-26) did, but here note that SfxViewShell::Activate() ignores the case when the object shell has no base model. So extend that and in case the object shell has a base model, but it's not initialized, do the same (ignore the problem that setCurrentController() could not finish successfully). This solves the high level problem that processing an user event on the main loop should not throw exceptions. Change-Id: Ibd6309d7de12964a35a914c16fabc5fc7f61b39b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195367 Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-by: Caolán McNamara <[email protected]> (cherry picked from commit 28e96caf18ce16b0e4818887c82c33bfeb6838e6) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195470 Reviewed-by: Mike Kaganski <[email protected]> Tested-by: Miklos Vajna <[email protected]> diff --git a/sfx2/source/view/viewsh.cxx b/sfx2/source/view/viewsh.cxx index 23004089e82b..b896e4e501f6 100644 --- a/sfx2/source/view/viewsh.cxx +++ b/sfx2/source/view/viewsh.cxx @@ -2532,7 +2532,16 @@ void SfxViewShell::Activate( bool bMDI ) { SfxObjectShell *pSh = GetViewFrame().GetObjectShell(); if (const auto xModel = pSh->GetModel()) - xModel->setCurrentController(GetController()); + { + try + { + xModel->setCurrentController(GetController()); + } + catch (const uno::Exception&) + { + TOOLS_WARN_EXCEPTION("sfx.view", "SfxViewShell::Activate: failed to set current controller"); + } + } SetCurrentDocument(); }
