[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-5.1' - vcl/source

Michael Meeks michael.meeks at collabora.com
Sat Nov 26 22:26:48 UTC 2016


 vcl/source/window/window.cxx |   16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

New commits:
commit b3bc9d55c715f3c5357742e54a51c3116294199b
Author: Michael Meeks <michael.meeks at collabora.com>
Date:   Sat Nov 26 15:47:15 2016 +0000

    tdf#101327 - tolerate exceptions during window construction better.
    
    It appears we can end up being a frame window, which is not added
    into the list of frames; so tolerate that.
    
    Change-Id: I7696e79636f7794f327027f0ca73363eef1937e5
    Reviewed-on: https://gerrit.libreoffice.org/31235
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Michael Meeks <michael.meeks at collabora.com>
    Tested-by: Michael Meeks <michael.meeks at collabora.com>

diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx
index 293d735..63951eb 100644
--- a/vcl/source/window/window.cxx
+++ b/vcl/source/window/window.cxx
@@ -565,12 +565,22 @@ void Window::dispose()
             pSVData->maWinData.mpFirstFrame = mpWindowImpl->mpFrameData->mpNextFrame;
         else
         {
+            sal_Int32 nWindows = 0;
             vcl::Window* pSysWin = pSVData->maWinData.mpFirstFrame;
-            while ( pSysWin->mpWindowImpl->mpFrameData->mpNextFrame.get() != this )
+            while ( pSysWin && pSysWin->mpWindowImpl->mpFrameData->mpNextFrame.get() != this )
+            {
                 pSysWin = pSysWin->mpWindowImpl->mpFrameData->mpNextFrame;
+                nWindows++;
+            }
 
-            assert (mpWindowImpl->mpFrameData->mpNextFrame.get() != pSysWin);
-            pSysWin->mpWindowImpl->mpFrameData->mpNextFrame = mpWindowImpl->mpFrameData->mpNextFrame;
+            if ( pSysWin )
+            {
+                assert (mpWindowImpl->mpFrameData->mpNextFrame.get() != pSysWin);
+                pSysWin->mpWindowImpl->mpFrameData->mpNextFrame = mpWindowImpl->mpFrameData->mpNextFrame;
+            }
+            else // if it is not in the list, we can't remove it.
+                SAL_WARN("vcl", "Window " << this << " marked as frame window, "
+                         "is missing from list of " << nWindows << " frames");
         }
         mpWindowImpl->mpFrame->SetCallback( nullptr, nullptr );
         pSVData->mpDefInst->DestroyFrame( mpWindowImpl->mpFrame );


More information about the Libreoffice-commits mailing list