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();
     }

Reply via email to