diff options
author | Tomáš Chvátal <tchvatal@suse.com> | 2019-08-23 09:44:01 +0200 |
---|---|---|
committer | Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de> | 2019-08-27 08:05:34 +0200 |
commit | 09d29fab72e22ba830f178b15a74a5a87c8a73a5 (patch) | |
tree | 78d5be35d0e4a0238146df1207cd60ef509801de /sw | |
parent | 1bad7f0b19e47a41a1919573f80785ec62c611af (diff) |
Fix old boost build for good
With the previous approach the code could lead to crashes in
the flowfrm.cxx
Change-Id: I3b56ed46db9d37a606a1cd793a20b8aff22db6e2
Reviewed-on: https://gerrit.libreoffice.org/78003
Reviewed-by: Tomáš Chvátal <tchvatal@suse.com>
Tested-by: Tomáš Chvátal <tchvatal@suse.com>
Reviewed-by: Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de>
Diffstat (limited to 'sw')
-rw-r--r-- | sw/source/core/inc/frame.hxx | 4 | ||||
-rw-r--r-- | sw/source/core/layout/calcmove.cxx | 9 | ||||
-rw-r--r-- | sw/source/core/layout/flowfrm.cxx | 6 |
3 files changed, 16 insertions, 3 deletions
diff --git a/sw/source/core/inc/frame.hxx b/sw/source/core/inc/frame.hxx index a966947ca94c..5cae3ccabdc9 100644 --- a/sw/source/core/inc/frame.hxx +++ b/sw/source/core/inc/frame.hxx @@ -1245,11 +1245,15 @@ public: m_pForbidFrame->ForbidDelete(); } + SwFrameDeleteGuard(const SwFrameDeleteGuard&) =delete; + ~SwFrameDeleteGuard() { if (m_pForbidFrame) m_pForbidFrame->AllowDelete(); } + + SwFrameDeleteGuard& operator=(const SwFrameDeleteGuard&) =delete; }; typedef long (SwFrame:: *SwFrameGet)() const; diff --git a/sw/source/core/layout/calcmove.cxx b/sw/source/core/layout/calcmove.cxx index 3502450c2a47..cb956d8f916c 100644 --- a/sw/source/core/layout/calcmove.cxx +++ b/sw/source/core/layout/calcmove.cxx @@ -404,14 +404,19 @@ void SwFrame::PrepareCursor() const bool bTab = IsTabFrame(); bool bNoSect = IsInSct(); +#if BOOST_VERSION < 105600 + std::list<FlowFrameJoinLockGuard> tabGuard; + std::list<SwFrameDeleteGuard> rowGuard; +#else boost::optional<FlowFrameJoinLockGuard> tabGuard; boost::optional<SwFrameDeleteGuard> rowGuard; +#endif SwFlowFrame* pThis = bCnt ? static_cast<SwContentFrame*>(this) : nullptr; if ( bTab ) { #if BOOST_VERSION < 105600 - tabGuard.reset(static_cast<SwTabFrame*>(this)); // tdf#125741 + tabGuard.emplace_back(static_cast<SwTabFrame*>(this)); // tdf#125741 #else tabGuard.emplace(static_cast<SwTabFrame*>(this)); // tdf#125741 #endif @@ -420,7 +425,7 @@ void SwFrame::PrepareCursor() else if (IsRowFrame()) { #if BOOST_VERSION < 105600 - rowGuard.reset(SwFrameDeleteGuard(this)); // tdf#125741 keep this alive + rowGuard.emplace_back(this); // tdf#125741 keep this alive #else rowGuard.emplace(this); // tdf#125741 keep this alive #endif diff --git a/sw/source/core/layout/flowfrm.cxx b/sw/source/core/layout/flowfrm.cxx index ea9df3300d11..c7cfd3006f06 100644 --- a/sw/source/core/layout/flowfrm.cxx +++ b/sw/source/core/layout/flowfrm.cxx @@ -2523,7 +2523,11 @@ bool SwFlowFrame::MoveBwd( bool &rbReformat ) { auto const pOld = m_rThis.GetUpper(); +#if BOOST_VERSION < 105600 + std::list<SwFrameDeleteGuard> g; +#else ::boost::optional<SwFrameDeleteGuard> g; +#endif if (m_rThis.GetUpper()->IsCellFrame()) { // note: IsFollowFlowRow() is never set for new-style tables @@ -2534,7 +2538,7 @@ bool SwFlowFrame::MoveBwd( bool &rbReformat ) { // lock follow-flow-row (similar to sections above) #if BOOST_VERSION < 105600 - g.reset(SwFrameDeleteGuard(m_rThis.GetUpper()->GetUpper())); + g.emplace_back(m_rThis.GetUpper()->GetUpper()); #else g.emplace(m_rThis.GetUpper()->GetUpper()); #endif |