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
|
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#936188 CVE-2015-5212, bnc#934423 CVE-2015-45513,
|
||||||
bnc#934423 CVE-2015-4551, bnc#910805 CVE-2014-8146,
|
bnc#934423 CVE-2015-4551, bnc#910805 CVE-2014-8146,
|
||||||
bnc#940838 CVE-2015-5214, bnc#936190 CVE-2015-5213,
|
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
|
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
|
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
|
.jar generating
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
|
@ -175,6 +175,8 @@ Patch10: bnc-889755.diff
|
|||||||
Patch11: bnc-679938.diff
|
Patch11: bnc-679938.diff
|
||||||
# PATCH-FIX-UPSTREAM: taken from Master to fix flaky test
|
# PATCH-FIX-UPSTREAM: taken from Master to fix flaky test
|
||||||
Patch12: use-long-for-test-comparsion.patch
|
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
|
# try to save space by using hardlinks
|
||||||
Patch990: install-with-hardlinks.diff
|
Patch990: install-with-hardlinks.diff
|
||||||
BuildRequires: %{name}-share-linker
|
BuildRequires: %{name}-share-linker
|
||||||
@ -1005,6 +1007,7 @@ Provides additional %{langname} translations and resources for %{project}. \
|
|||||||
%patch10 -p1
|
%patch10 -p1
|
||||||
%patch11 -p1
|
%patch11 -p1
|
||||||
%patch12 -p1
|
%patch12 -p1
|
||||||
|
%patch13 -p1
|
||||||
%patch990 -p1
|
%patch990 -p1
|
||||||
# 256x256 icons
|
# 256x256 icons
|
||||||
tar -xjf %{SOURCE20}
|
tar -xjf %{SOURCE20}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user