[Libreoffice-commits] core.git: Branch 'distro/lhm/libreoffice-6-1+backports' - sw/source

Michael Stahl (via logerrit) logerrit at kemper.freedesktop.org
Fri May 24 12:25:28 UTC 2019


 sw/source/core/layout/tabfrm.cxx |    3 +++
 1 file changed, 3 insertions(+)

New commits:
commit 8ca56034017dd03dfce9bc63078606b00c1a120c
Author:     Michael Stahl <Michael.Stahl at cib.de>
AuthorDate: Wed May 22 17:39:15 2019 +0200
Commit:     Thorsten Behrens <Thorsten.Behrens at CIB.de>
CommitDate: Fri May 24 14:24:16 2019 +0200

    tdf#119109 sw: fix SwTableFrame follow chain formatting
    
    The remaining problem is that with the previous commit, the layout stops
    at some point and everything is crammed into the next-to-last page, with
    the following symptom:
    
    warn:legacy.osl:7667:7667:sw/source/core/layout/tabfrm.cxx:2642: debug assertion: <SwTabFrame::MakeAll()> - format of table lowers suppressed by fix i44910
    
    This is apparently because of some very funny recursion that goes in
    circles until it formats some part of the "outer" table again.
    
    0  SwTabFrame::MakeAll(OutputDevice*) (this=0x82b0280) at tabfrm.cxx:2642
    ^ mpUpper -> 928 - top-level SwTabFrame and m_pFollow of 905
    1  SwFrame::PrepareMake(OutputDevice*) (this=0x82b0280) at calcmove.cxx:372
    2  SwFrame::Calc(OutputDevice*) const (this=0x82b0280) at trvlfrm.cxx:1790
    3  SwFrame::PrepareMake(OutputDevice*) (this=0x6c06ba0) at calcmove.cxx:247
    4  SwFrame::Calc(OutputDevice*) const (this=0x6c06ba0) at trvlfrm.cxx:1790
    5  SwFrame::PrepareMake(OutputDevice*) (this=0x82aebf0) at calcmove.cxx:247
    6  SwFrame::Calc(OutputDevice*) const (this=0x82aebf0) at trvlfrm.cxx:1790
    7  SwFrame::PrepareMake(OutputDevice*) (this=0x6d674e0) at calcmove.cxx:247
    8  SwFrame::Calc(OutputDevice*) const (this=0x6d674e0) at trvlfrm.cxx:1790
    ^ m_pFollow->mpNext -> 332 - again! it's now m_pFollow->mpNext
    9  SwTabFrame::MakeAll(OutputDevice*) (this=0x6d64570) at tabfrm.cxx:2544
    ^ 303 - nested SwTabFrame, used to precede 332 but has now split and its m_pFollow precedes 332
    10 SwFrame::PrepareMake(OutputDevice*) (this=0x6d674e0) at calcmove.cxx:313
    11 SwFrame::Calc(OutputDevice*) const (this=0x6d674e0) at trvlfrm.cxx:1790
    ^ 332 - SwTextFrame originally inside 991, but moved under top-level SwTabFrame 928 at this point
    12 SwContentFrame::CalcLowers(SwLayoutFrame*, SwLayoutFrame const*, long, bool) (pLay=0x6dccbf0, pDontLeave=0x6ed6e30, nBottom=9223372036854775807, bSkipRowSpanCells=true) at tabfrm.cxx:1479
    ^ m_pLower -> 991 - SwRowFrame
    13 lcl_RecalcRow(SwRowFrame*, long) (pRow=0x6dccbf0, nBottom=9223372036854775807) at tabfrm.cxx:1614
    14 lcl_RecalcTable(SwTabFrame&, SwLayoutFrame*, SwLayNotify&) (rTab=..., pFirstRow=0x6dccbf0, rNotify=...) at tabfrm.cxx:1691
    15 SwTabFrame::MakeAll(OutputDevice*) (this=0x6ed6e30) at tabfrm.cxx:2082
    ^ m_pFollow -> 905 - top-level SwTabFrame
    16 SwTabFrame::MakeAll(OutputDevice*) (this=0x381d3e0) at tabfrm.cxx:2504
    17 SwFrame::PrepareMake(OutputDevice*) (this=0x381d3e0) at calcmove.cxx:372
    18 SwFrame::Calc(OutputDevice*) const (this=0x381d3e0) at trvlfrm.cxx:1790
    ^ 866 - top-level SwTabFrame
    19 SwLayAction::FormatLayoutTab(SwTabFrame*, bool) (this=0x7fff95aa3f20, pTab=0x381d3e0, bAddRect=true) at layact.cxx:1483
    20 SwLayAction::FormatLayout(OutputDevice*, SwLayoutFrame*, bool) (this=0x7fff95aa3f20, pLay=0x6cfedc0, bAddRect=true) at layact.cxx:1375
    21 SwLayAction::FormatLayout(OutputDevice*, SwLayoutFrame*, bool) (this=0x7fff95aa3f20, pLay=0x6e23fd0, bAddRect=true) at layact.cxx:1380
    
    The first attempt was to add a TextFrameLockGuard around the
    pFrame->MakeAll() call in PrepareMake(), with corresponding test in
    SwTabFrame::MakeAll() ... but a similar problem still occurred, just now
    on page 18 instead of page 12.
    
    Another idea is to prevent PrepareMake() from formatting the
    SwTableFrame's follow *again*; it was already formatted by
    SwTabFrame::MakeAll() anyway, just before it calls pNxt->Calc().
    
    With this, we get 23 pages for the bugdoc, same as before that commit:
    (regression from 18765b9fa739337d2d891513f6e2fb7c3ce23b50)
    
    Change-Id: I71e3f92b5f19b800626a008527fa75d08641e8de
    Reviewed-on: https://gerrit.libreoffice.org/72799
    Reviewed-by: Michael Stahl <Michael.Stahl at cib.de>
    Tested-by: Michael Stahl <Michael.Stahl at cib.de>
    (cherry picked from commit 53a0a86df6eb5fc64a85ecd03f2e354fd4d8e213)
    Reviewed-on: https://gerrit.libreoffice.org/72819
    Tested-by: Jenkins
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>
    (cherry picked from commit 72b52ba3c7bd3233ca3e721c3e3d69dd08246bdc)
    Reviewed-on: https://gerrit.libreoffice.org/72867
    Tested-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>

diff --git a/sw/source/core/layout/tabfrm.cxx b/sw/source/core/layout/tabfrm.cxx
index 3580b4a9585f..fcdec1a97a69 100644
--- a/sw/source/core/layout/tabfrm.cxx
+++ b/sw/source/core/layout/tabfrm.cxx
@@ -2541,6 +2541,9 @@ void SwTabFrame::MakeAll(vcl::RenderContext* pRenderContext)
                                     }
                                     if ( bCalcNxt )
                                     {
+                                        // tdf#119109 follow was just formatted,
+                                        // don't do it again now
+                                        FlowFrameJoinLockGuard g(GetFollow());
                                         pNxt->Calc(pRenderContext);
                                     }
                                 }


More information about the Libreoffice-commits mailing list