[Libreoffice-commits] core.git: 2 commits - sw/source vcl/source
Caolán McNamara
caolanm at redhat.com
Tue Dec 12 14:27:00 UTC 2017
sw/source/filter/html/swhtml.cxx | 15 ++++++++-------
sw/source/filter/html/swhtml.hxx | 6 ++++++
sw/source/filter/inc/fltshell.hxx | 24 ++++++++++++++++++++++++
sw/source/filter/ww8/ww8par.cxx | 18 +-----------------
sw/source/filter/ww8/ww8par.hxx | 10 ----------
vcl/source/app/salusereventlist.cxx | 1 -
6 files changed, 39 insertions(+), 35 deletions(-)
New commits:
commit 810b5f6491850d70bfe2da1f58927a3404d37d49
Author: Caolán McNamara <caolanm at redhat.com>
Date: Mon Dec 11 15:20:17 2017 +0000
reuse ImportProgress class for exception safety
cause if no EndProgress is called then the shell leaks
so the document leaks, etc
Change-Id: I8e22644e58ac440dbee60c2ceacda4abb002c81c
Reviewed-on: https://gerrit.libreoffice.org/46246
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
Tested-by: Caolán McNamara <caolanm at redhat.com>
diff --git a/sw/source/filter/html/swhtml.cxx b/sw/source/filter/html/swhtml.cxx
index 1d865e761e59..e0740fa50b51 100644
--- a/sw/source/filter/html/swhtml.cxx
+++ b/sw/source/filter/html/swhtml.cxx
@@ -537,8 +537,9 @@ SvParserState SwHTMLParser::CallParser()
{
rInput.Seek(STREAM_SEEK_TO_END);
rInput.ResetError();
- ::StartProgress( STR_STATSTR_W4WREAD, 0, rInput.Tell(),
- m_xDoc->GetDocShell() );
+
+ m_xProgress.reset(new ImportProgress(m_xDoc->GetDocShell(), 0, rInput.Tell()));
+
rInput.Seek(STREAM_SEEK_TO_BEGIN);
rInput.ResetError();
}
@@ -619,7 +620,7 @@ void SwHTMLParser::Continue( HtmlTokenId nToken )
}
// disable progress bar again
- EndProgress( m_xDoc->GetDocShell() );
+ m_xProgress.reset();
bool bLFStripped = false;
if( SvParserState::Pending != GetStatus() )
@@ -1414,8 +1415,8 @@ void SwHTMLParser::NextToken( HtmlTokenId nToken )
SetTextCollAttrs();
}
// progress bar
- if( !GetMedium() || !GetMedium()->IsRemote() )
- ::SetProgressState( rInput.Tell(), m_xDoc->GetDocShell() );
+ if (m_xProgress)
+ m_xProgress->Update(rInput.Tell());
}
break;
@@ -2498,9 +2499,9 @@ void SwHTMLParser::ShowStatline()
OSL_ENSURE( SvParserState::Working==eState, "ShowStatLine not in working state - That can go wrong" );
// scroll bar
- if( !GetMedium() || !GetMedium()->IsRemote() )
+ if (m_xProgress)
{
- ::SetProgressState( rInput.Tell(), m_xDoc->GetDocShell() );
+ m_xProgress->Update(rInput.Tell());
CheckActionViewShell();
}
else
diff --git a/sw/source/filter/html/swhtml.hxx b/sw/source/filter/html/swhtml.hxx
index 799d856b4577..c02309b7e4c0 100644
--- a/sw/source/filter/html/swhtml.hxx
+++ b/sw/source/filter/html/swhtml.hxx
@@ -26,6 +26,7 @@
#include <svtools/htmltokn.h>
#include <editeng/svxenum.hxx>
#include <rtl/ref.hxx>
+#include <fltshell.hxx>
#include <fmtornt.hxx>
#include <com/sun/star/drawing/XShape.hpp>
#include <com/sun/star/form/XFormComponent.hpp>
@@ -363,6 +364,11 @@ class SwHTMLParser : public SfxHTMLParser, public SwClient
friend class CellSaveStruct;
friend class CaptionSaveStruct;
+ /*
+ Progress bar
+ */
+ std::unique_ptr<ImportProgress> m_xProgress;
+
OUString m_aPathToFile;
OUString m_sBaseURL;
OUString m_aBasicLib;
diff --git a/sw/source/filter/inc/fltshell.hxx b/sw/source/filter/inc/fltshell.hxx
index bc8fb87bf806..e1a8503d657d 100644
--- a/sw/source/filter/inc/fltshell.hxx
+++ b/sw/source/filter/inc/fltshell.hxx
@@ -25,8 +25,10 @@
#include <editeng/formatbreakitem.hxx>
#include <poolfmt.hxx>
#include <fmtornt.hxx>
+#include <mdiexp.hxx>
#include <ndindex.hxx>
#include <pam.hxx>
+#include <strings.hrc>
#include <IDocumentRedlineAccess.hxx>
#include <cstddef>
@@ -319,6 +321,28 @@ public:
SW_DLLPUBLIC void UpdatePageDescs(SwDoc &rDoc, size_t nInPageDescOffset);
+class ImportProgress
+{
+private:
+ SwDocShell *m_pDocShell;
+public:
+ ImportProgress(SwDocShell *pDocShell, long nStartVal, long nEndVal)
+ : m_pDocShell(pDocShell)
+ {
+ ::StartProgress(STR_STATSTR_W4WREAD, nStartVal, nEndVal, m_pDocShell);
+ }
+
+ void Update(sal_uInt16 nProgress)
+ {
+ ::SetProgressState(nProgress, m_pDocShell); // Update
+ }
+
+ ~ImportProgress()
+ {
+ ::EndProgress(m_pDocShell);
+ }
+};
+
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/filter/ww8/ww8par.cxx b/sw/source/filter/ww8/ww8par.cxx
index 696826550e3d..db82bf84f21c 100644
--- a/sw/source/filter/ww8/ww8par.cxx
+++ b/sw/source/filter/ww8/ww8par.cxx
@@ -4902,22 +4902,6 @@ void SwWW8ImplReader::ReadGlobalTemplateSettings( const OUString& sCreatedFrom,
}
}
-ImportProgress::ImportProgress(SwDocShell *pDocShell)
- : m_pDocShell(pDocShell)
-{
- ::StartProgress(STR_STATSTR_W4WREAD, 0, 100, m_pDocShell);
-}
-
-void ImportProgress::Update(sal_uInt16 nProgress)
-{
- ::SetProgressState(nProgress, m_pDocShell); // Update
-}
-
-ImportProgress::~ImportProgress()
-{
- ::EndProgress(m_pDocShell);
-}
-
ErrCode SwWW8ImplReader::CoreLoad(WW8Glossary const *pGloss)
{
m_rDoc.SetDocumentType( SwDoc::DOCTYPE_MSWORD );
@@ -5006,7 +4990,7 @@ ErrCode SwWW8ImplReader::CoreLoad(WW8Glossary const *pGloss)
if (!m_bNewDoc)
aSttNdIdx = m_pPaM->GetPoint()->nNode;
- m_xProgress.reset(new ImportProgress(m_pDocShell));
+ m_xProgress.reset(new ImportProgress(m_pDocShell, 0, 100));
// read Font Table
m_xFonts.reset(new WW8Fonts(*m_pTableStream, *m_xWwFib));
diff --git a/sw/source/filter/ww8/ww8par.hxx b/sw/source/filter/ww8/ww8par.hxx
index 32cdc79aa96c..57a6b4c5355c 100644
--- a/sw/source/filter/ww8/ww8par.hxx
+++ b/sw/source/filter/ww8/ww8par.hxx
@@ -1052,16 +1052,6 @@ struct WW8TabBandDesc
typedef std::set<WW8_CP> cp_set;
typedef std::vector<WW8_CP> cp_vector;
-class ImportProgress
-{
-private:
- SwDocShell *m_pDocShell;
-public:
- ImportProgress(SwDocShell *pDocShell);
- void Update(sal_uInt16 nProgress);
- ~ImportProgress();
-};
-
class SwWW8ImplReader
{
private:
commit ad35cc9ed0faa6555bc09e5e065abb5cdc6c4ee6
Author: Henry Castro <hcastro at collabora.com>
Date: Sun Dec 10 21:11:35 2017 -0400
lok: Assertion `m_aProcessingUserEvents.empty()' failed
This occurs after saving a writer document
loolforkit: /home/hcastro/projects/lo-sid/vcl/source/app/salusereventlist.cxx:56: bool SalUserEventList::DispatchUserEvents(bool): Assertion `m_aProcessingUserEvents.empty()' failed.
/home/hcastro/build/gcc-lool-sid/loolforkit(_ZN7SigUtil13dumpBacktraceEv+0x49) [0x55ba3f0740c6]
/home/hcastro/build/gcc-lool-sid/loolforkit(+0x149fb1) [0x55ba3f073fb1]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x110c0) [0x7f57a41350c0]
/lib/x86_64-linux-gnu/libc.so.6(gsignal+0xcf) [0x7f57a3db7fcf]
/lib/x86_64-linux-gnu/libc.so.6(abort+0x16a) [0x7f57a3db93fa]
/lib/x86_64-linux-gnu/libc.so.6(+0x2be37) [0x7f57a3db0e37]
/lib/x86_64-linux-gnu/libc.so.6(+0x2bee2) [0x7f57a3db0ee2]
/home/hcastro/build/gcc-lo-sid/instdir/program/libvcllo.so(_ZN16SalUserEventList18DispatchUserEventsEb+0x86) [0x7f5798f2178c]
/home/hcastro/build/gcc-lo-sid/instdir/program/libvcllo.so(_ZN14SvpSalInstance7DoYieldEbb+0x3b) [0x7f57990ce48d]
/home/hcastro/build/gcc-lo-sid/instdir/program/libvcllo.so(+0xa7b2fd) [0x7f5798f5b2fd]
/home/hcastro/build/gcc-lo-sid/instdir/program/libvcllo.so(_ZN11Application5YieldEv+0x13) [0x7f5798f5735b]
/home/hcastro/build/gcc-lo-sid/instdir/program/libvcllo.so(_ZN11Application7ExecuteEv+0x167) [0x7f5798f56f11]
/home/hcastro/build/gcc-lo-sid/instdir/program/libsofficeapp.so(+0x4e419) [0x7f57a30d3419]
/home/hcastro/build/gcc-lo-sid/instdir/program/libvcllo.so(+0xa87119) [0x7f5798f67119]
/home/hcastro/build/gcc-lo-sid/instdir/program/libvcllo.so(_Z6SVMainv+0x4d) [0x7f5798f67282]
/home/hcastro/build/gcc-lo-sid/instdir/program/libsofficeapp.so(soffice_main+0x1bf) [0x7f57a312a6b5]
/home/hcastro/build/gcc-lo-sid/instdir/program/libsofficeapp.so(+0xe8db2) [0x7f57a316ddb2]
/home/hcastro/build/gcc-lo-sid/instdir/program/libuno_sal.so.3(+0x77581) [0x7f579f807581]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x7494) [0x7f57a412b494]
/lib/x86_64-linux-gnu/libc.so.6(clone+0x3f) [0x7f57a3e6daff]
Change-Id: I455bd44d40c6c9b3ed49d047b8bce23a4600c265
Reviewed-on: https://gerrit.libreoffice.org/46206
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Henry Castro <hcastro at collabora.com>
diff --git a/vcl/source/app/salusereventlist.cxx b/vcl/source/app/salusereventlist.cxx
index a3b77ecc2c19..2dfc84cc230c 100644
--- a/vcl/source/app/salusereventlist.cxx
+++ b/vcl/source/app/salusereventlist.cxx
@@ -53,7 +53,6 @@ bool SalUserEventList::DispatchUserEvents( bool bHandleAllCurrentEvents )
{
osl::MutexGuard aGuard( m_aUserEventsMutex );
- assert( m_aProcessingUserEvents.empty() );
if( ! m_aUserEvents.empty() )
{
if( bHandleAllCurrentEvents )
More information about the Libreoffice-commits
mailing list