Accepting request 347006 from LibreOffice:5.0
sync with LibreOffice:5.0 (fix of bnc#954345) OBS-URL: https://build.opensuse.org/request/show/347006 OBS-URL: https://build.opensuse.org/package/show/LibreOffice:Factory/libreoffice?expand=0&rev=347
This commit is contained in:
parent
48ba5a8218
commit
8bff711798
156
bnc-954345.diff
Normal file
156
bnc-954345.diff
Normal file
@ -0,0 +1,156 @@
|
||||
From 611be3d78d45c46c942b88e1149dfc428070fc71 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?L=C3=A1szl=C3=B3=20N=C3=A9meth?=
|
||||
<laszlo.nemeth@collabora.com>
|
||||
Date: Fri, 27 Nov 2015 21:59:30 +0100
|
||||
Subject: [PATCH] tdf#95614 fix freezing with linked graphic
|
||||
|
||||
When an unloaded linked picture comes into the visible view
|
||||
(including repainting a page), SwNoTextFrm::PaintPicture()
|
||||
starts a thread to load it in the background using the
|
||||
TriggerAsyncRetrieveInputStream() method of the graphic node.
|
||||
|
||||
To avoid to start a second thread on the same graphic node,
|
||||
TriggerAsyncRetrieveInputStream() checks mpThreadConsumer,
|
||||
the graphic node member variable for the possible thread object.
|
||||
|
||||
The problem is that when the thread finished and
|
||||
SwGrfNode::UpdateLinkWithInputStream() reset mpThreadConsumer,
|
||||
the graphic object of the graphic node is still in unloaded
|
||||
state (its type is GRAPHIC_DEFAULT or GRAPHIC_NONE instead of
|
||||
GRAPHIC_BITMAP or GRAPHIC_GDIMETAFILE) for a while, because
|
||||
its modification is solved asynchronously after several
|
||||
SvFileObject::GetData() calls. In the intermediate state
|
||||
of the graphic object, with the high priority repaints of
|
||||
the new scheduler, PaintPicture() could start new thread
|
||||
to load the image again.
|
||||
|
||||
Using the new member variable SwGrfNode::mbUpdateLinkInProgress,
|
||||
this patch will prevent the graphic node to start newer thread
|
||||
unnecessarily.
|
||||
|
||||
Change-Id: I9433f0fa4613294103a00a3955fc2f35d8863b59
|
||||
---
|
||||
sw/inc/ndgrf.hxx | 3 +++
|
||||
sw/source/core/doc/notxtfrm.cxx | 15 ++++++++++-----
|
||||
sw/source/core/graphic/ndgrf.cxx | 7 +++++--
|
||||
3 files changed, 18 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/sw/inc/ndgrf.hxx b/sw/inc/ndgrf.hxx
|
||||
index 668c5f5..e7b2261 100644
|
||||
--- a/sw/inc/ndgrf.hxx
|
||||
+++ b/sw/inc/ndgrf.hxx
|
||||
@@ -51,6 +51,7 @@ class SW_DLLPUBLIC SwGrfNode: public SwNoTextNode
|
||||
|
||||
boost::shared_ptr< SwAsyncRetrieveInputStreamThreadConsumer > mpThreadConsumer;
|
||||
bool mbLinkedInputStreamReady;
|
||||
+ bool mbUpdateLinkInProgress;
|
||||
com::sun::star::uno::Reference<com::sun::star::io::XInputStream> mxInputStream;
|
||||
bool mbIsStreamReadOnly;
|
||||
|
||||
@@ -198,6 +199,8 @@ public:
|
||||
|
||||
boost::weak_ptr< SwAsyncRetrieveInputStreamThreadConsumer > GetThreadConsumer() { return mpThreadConsumer;}
|
||||
bool IsLinkedInputStreamReady() const { return mbLinkedInputStreamReady;}
|
||||
+ bool IsUpdateLinkInProgress() const { return mbUpdateLinkInProgress;}
|
||||
+ void SetUpdateLinkInProgress(bool b) { mbUpdateLinkInProgress = b; }
|
||||
void TriggerAsyncRetrieveInputStream();
|
||||
void ApplyInputStream(
|
||||
com::sun::star::uno::Reference<com::sun::star::io::XInputStream> xInputStream,
|
||||
diff --git a/sw/source/core/doc/notxtfrm.cxx b/sw/source/core/doc/notxtfrm.cxx
|
||||
index 02a815b..d943e6d 100644
|
||||
--- a/sw/source/core/doc/notxtfrm.cxx
|
||||
+++ b/sw/source/core/doc/notxtfrm.cxx
|
||||
@@ -897,10 +897,11 @@ void SwNoTextFrm::PaintPicture( vcl::RenderContext* pOut, const SwRect &rGrfArea
|
||||
{
|
||||
Size aTmpSz;
|
||||
::sfx2::SvLinkSource* pGrfObj = pGrfNd->GetLink()->GetObj();
|
||||
- if( !pGrfObj ||
|
||||
- !pGrfObj->IsDataComplete() ||
|
||||
- !(aTmpSz = pGrfNd->GetTwipSize()).Width() ||
|
||||
- !aTmpSz.Height() || !pGrfNd->GetAutoFormatLvl() )
|
||||
+ if ( ( !pGrfObj ||
|
||||
+ !pGrfObj->IsDataComplete() ||
|
||||
+ !(aTmpSz = pGrfNd->GetTwipSize()).Width() ||
|
||||
+ !aTmpSz.Height() || !pGrfNd->GetAutoFormatLvl() ) &&
|
||||
+ !pGrfNd->IsUpdateLinkInProgress() )
|
||||
{
|
||||
pGrfNd->TriggerAsyncRetrieveInputStream(); // #i73788#
|
||||
}
|
||||
@@ -909,9 +910,13 @@ void SwNoTextFrm::PaintPicture( vcl::RenderContext* pOut, const SwRect &rGrfArea
|
||||
GetRealURL( *pGrfNd, aText );
|
||||
::lcl_PaintReplacement( aAlignedGrfArea, aText, *pShell, this, false );
|
||||
bContinue = false;
|
||||
+ } else if ( rGrfObj.GetType() != GRAPHIC_DEFAULT &&
|
||||
+ rGrfObj.GetType() != GRAPHIC_NONE &&
|
||||
+ pGrfNd->IsUpdateLinkInProgress() )
|
||||
+ {
|
||||
+ pGrfNd->SetUpdateLinkInProgress( false );
|
||||
}
|
||||
}
|
||||
-
|
||||
if( bContinue )
|
||||
{
|
||||
if( rGrfObj.GetGraphic().IsSupportedGraphic())
|
||||
diff --git a/sw/source/core/graphic/ndgrf.cxx b/sw/source/core/graphic/ndgrf.cxx
|
||||
index 5c2867e..dbbe379 100644
|
||||
--- a/sw/source/core/graphic/ndgrf.cxx
|
||||
+++ b/sw/source/core/graphic/ndgrf.cxx
|
||||
@@ -71,6 +71,7 @@ SwGrfNode::SwGrfNode(
|
||||
mpReplacementGraphic(0),
|
||||
// #i73788#
|
||||
mbLinkedInputStreamReady( false ),
|
||||
+ mbUpdateLinkInProgress( false ),
|
||||
mbIsStreamReadOnly( false )
|
||||
{
|
||||
maGrfObj.SetSwapStreamHdl( LINK(this, SwGrfNode, SwapGraphic) );
|
||||
@@ -89,6 +90,7 @@ SwGrfNode::SwGrfNode( const SwNodeIndex & rWhere,
|
||||
mpReplacementGraphic(0),
|
||||
// #i73788#
|
||||
mbLinkedInputStreamReady( false ),
|
||||
+ mbUpdateLinkInProgress( false ),
|
||||
mbIsStreamReadOnly( false )
|
||||
{
|
||||
maGrfObj.SetSwapStreamHdl( LINK(this, SwGrfNode, SwapGraphic) );
|
||||
@@ -112,6 +114,7 @@ SwGrfNode::SwGrfNode( const SwNodeIndex & rWhere,
|
||||
mpReplacementGraphic(0),
|
||||
// #i73788#
|
||||
mbLinkedInputStreamReady( false ),
|
||||
+ mbUpdateLinkInProgress( false ),
|
||||
mbIsStreamReadOnly( false )
|
||||
{
|
||||
maGrfObj.SetSwapStreamHdl( LINK(this, SwGrfNode, SwapGraphic) );
|
||||
@@ -521,7 +524,6 @@ bool SwGrfNode::SwapIn( bool bWaitForData )
|
||||
bool bRet = false;
|
||||
bInSwapIn = true;
|
||||
SwBaseLink* pLink = static_cast<SwBaseLink*>((::sfx2::SvBaseLink*) refLink);
|
||||
-
|
||||
if( pLink )
|
||||
{
|
||||
if( GRAPHIC_NONE == maGrfObj.GetType() ||
|
||||
@@ -1089,7 +1091,6 @@ void SwGrfNode::TriggerAsyncRetrieveInputStream()
|
||||
OSL_FAIL( "<SwGrfNode::TriggerAsyncLoad()> - Method is misused. Method call is only valid for graphic nodes, which refer a linked graphic file" );
|
||||
return;
|
||||
}
|
||||
-
|
||||
if ( mpThreadConsumer.get() == 0 )
|
||||
{
|
||||
mpThreadConsumer.reset( new SwAsyncRetrieveInputStreamThreadConsumer( *this ) );
|
||||
@@ -1104,6 +1105,7 @@ void SwGrfNode::TriggerAsyncRetrieveInputStream()
|
||||
}
|
||||
mpThreadConsumer->CreateThread( sGrfNm, sReferer );
|
||||
}
|
||||
+
|
||||
}
|
||||
|
||||
|
||||
@@ -1137,6 +1139,7 @@ void SwGrfNode::UpdateLinkWithInputStream()
|
||||
// #i88291#
|
||||
mxInputStream.clear();
|
||||
GetLink()->clearStreamToLoadFrom();
|
||||
+ mbUpdateLinkInProgress = true;
|
||||
mbLinkedInputStreamReady = false;
|
||||
mpThreadConsumer.reset();
|
||||
}
|
||||
--
|
||||
2.1.4
|
||||
|
@ -1,3 +1,9 @@
|
||||
-------------------------------------------------------------------
|
||||
Tue Dec 1 13:25:35 UTC 2015 - andras.timar@collabora.com
|
||||
|
||||
- bnc#954345 - LO-L3: Insert-->Image-->Insert as Link hangs writer
|
||||
* bnc-954345.diff
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Nov 9 09:12:03 UTC 2015 - tchvatal@suse.com
|
||||
|
||||
@ -74,7 +80,7 @@ Mon Sep 21 08:55:05 UTC 2015 - tchvatal@suse.com
|
||||
bnc#936188 CVE-2015-5212, bnc#934423 CVE-2015-45513,
|
||||
bnc#934423 CVE-2015-4551, bnc#910805 CVE-2014-8146,
|
||||
bnc#940838 CVE-2015-5214, bnc#936190 CVE-2015-5213,
|
||||
bnc#936188 CVE-2015-5212, bnc#934423 CVE-2015-4551
|
||||
bnc#936188 CVE-2015-5212, bnc#934423 CVE-2015-4551
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Sep 17 13:27:07 UTC 2015 - tchvatal@suse.com
|
||||
@ -342,7 +348,7 @@ Wed Apr 15 11:42:37 UTC 2015 - tchvatal@suse.com
|
||||
-------------------------------------------------------------------
|
||||
Tue Apr 14 13:49:22 UTC 2015 - tchvatal@suse.com
|
||||
|
||||
- Hopefully fix bnc#913042.Redo check phase that sometimes broke
|
||||
- Hopefully fix bnc#913042.Redo check phase that sometimes broke
|
||||
.jar generating
|
||||
|
||||
-------------------------------------------------------------------
|
||||
|
@ -175,6 +175,8 @@ Patch10: bnc-889755.diff
|
||||
Patch11: bnc-679938.diff
|
||||
# PATCH-FIX-UPSTREAM: taken from Master to fix flaky test
|
||||
Patch12: use-long-for-test-comparsion.patch
|
||||
# bnc#954345 - LO-L3: Insert-->Image-->Insert as Link hangs writer
|
||||
Patch13: bnc-954345.diff
|
||||
# try to save space by using hardlinks
|
||||
Patch990: install-with-hardlinks.diff
|
||||
BuildRequires: %{name}-share-linker
|
||||
@ -1005,6 +1007,7 @@ Provides additional %{langname} translations and resources for %{project}. \
|
||||
%patch10 -p1
|
||||
%patch11 -p1
|
||||
%patch12 -p1
|
||||
%patch13 -p1
|
||||
%patch990 -p1
|
||||
# 256x256 icons
|
||||
tar -xjf %{SOURCE20}
|
||||
|
Loading…
Reference in New Issue
Block a user