[libreoffice] Resolves: rhbz#652604 better survive exceptions in autorecovery
Caolan McNamara
caolanm at fedoraproject.org
Tue Jun 7 16:10:26 UTC 2011
commit 35b321fcaabab9a6411cf0208e3c19b4cedcf601
Author: Caolán McNamara <caolanm at redhat.com>
Date: Tue Jun 7 17:10:14 2011 +0100
Resolves: rhbz#652604 better survive exceptions in autorecovery
...z-652604-better-survive-exceptions-thrown.patch | 127 ++++++++++++++++++++
libreoffice.spec | 3 +
2 files changed, 130 insertions(+), 0 deletions(-)
---
diff --git a/0001-Related-rhbz-652604-better-survive-exceptions-thrown.patch b/0001-Related-rhbz-652604-better-survive-exceptions-thrown.patch
new file mode 100644
index 0000000..937184d
--- /dev/null
+++ b/0001-Related-rhbz-652604-better-survive-exceptions-thrown.patch
@@ -0,0 +1,127 @@
+From 5613954b275de8de9e6852738a7bfd215252d134 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm at redhat.com>
+Date: Tue, 7 Jun 2011 17:03:52 +0100
+Subject: [PATCH] Related: rhbz#652604 better survive exceptions thrown during
+ autorecover
+
+---
+ framework/inc/services/autorecovery.hxx | 20 ++++++++++++++
+ framework/source/services/autorecovery.cxx | 40 +++++++++++++++++++++------
+ 2 files changed, 51 insertions(+), 9 deletions(-)
+
+diff --git a/framework/inc/services/autorecovery.hxx b/framework/inc/services/autorecovery.hxx
+index 636ad98..6c4207e 100644
+--- a/framework/inc/services/autorecovery.hxx
++++ b/framework/inc/services/autorecovery.hxx
+@@ -861,6 +861,26 @@ class AutoRecovery : public css::lang::XTypeProvider
+ const ::rtl::OUString& sEventType,
+ AutoRecovery::TDocumentInfo* pInfo );
+
++
++ class ListenerInformer
++ {
++ private:
++ AutoRecovery &m_rRecovery;
++ sal_Int32 m_eJob;
++ bool m_bStopped;
++ public:
++ ListenerInformer(AutoRecovery &rRecovery, sal_Int32 eJob)
++ : m_rRecovery(rRecovery), m_eJob(eJob), m_bStopped(false)
++ {
++ }
++ void start();
++ void stop();
++ ~ListenerInformer()
++ {
++ stop();
++ }
++ };
++
+ //---------------------------------------
+
+ // TODO document me
+diff --git a/framework/source/services/autorecovery.cxx b/framework/source/services/autorecovery.cxx
+index efe2f17..ec60d13 100644
+--- a/framework/source/services/autorecovery.cxx
++++ b/framework/source/services/autorecovery.cxx
+@@ -576,6 +576,21 @@ void SAL_CALL AutoRecovery::dispatch(const css::util::URL&
+ implts_dispatch(aParams);
+ }
+
++void AutoRecovery::ListenerInformer::start()
++{
++ m_rRecovery.implts_informListener(m_eJob,
++ AutoRecovery::implst_createFeatureStateEvent(m_eJob, OPERATION_START, NULL));
++}
++
++void AutoRecovery::ListenerInformer::stop()
++{
++ if (m_bStopped)
++ return;
++ m_rRecovery.implts_informListener(m_eJob,
++ AutoRecovery::implst_createFeatureStateEvent(m_eJob, OPERATION_STOP, NULL));
++ m_bStopped = true;
++}
++
+ //-----------------------------------------------
+ void AutoRecovery::implts_dispatch(const DispatchParams& aParams)
+ {
+@@ -599,8 +614,8 @@ void AutoRecovery::implts_dispatch(const DispatchParams& aParams)
+ implts_stopTimer();
+ implts_stopListening();
+
+- implts_informListener(eJob,
+- AutoRecovery::implst_createFeatureStateEvent(eJob, OPERATION_START, NULL));
++ ListenerInformer aListenerInformer(*this, eJob);
++ aListenerInformer.start();
+
+ try
+ {
+@@ -676,13 +691,14 @@ void AutoRecovery::implts_dispatch(const DispatchParams& aParams)
+ )
+ implts_cleanUpWorkingEntry(aParams);
+ }
+- catch(const css::uno::RuntimeException& exRun)
+- { throw exRun; }
++ catch(const css::uno::RuntimeException&)
++ {
++ throw;
++ }
+ catch(const css::uno::Exception&)
+ {} // TODO better error handling
+
+- implts_informListener(eJob,
+- AutoRecovery::implst_createFeatureStateEvent(eJob, OPERATION_STOP, NULL));
++ aListenerInformer.stop();
+
+ // SAFE -> ----------------------------------
+ aWriteLock.lock();
+@@ -1304,8 +1320,8 @@ void AutoRecovery::implts_flushConfigItem(const AutoRecovery::TDocumentInfo& rIn
+ xModify->insertByName(sID, css::uno::makeAny(xSet));
+ }
+ }
+- catch(const css::uno::RuntimeException& exRun)
+- { throw exRun; }
++ catch(const css::uno::RuntimeException&)
++ { throw; }
+ catch(const css::uno::Exception&)
+ {} // ??? can it happen that a full disc let these set of operations fail too ???
+
+@@ -1627,7 +1643,13 @@ IMPL_LINK(AutoRecovery, implts_asyncDispatch, void*, EMPTYARG)
+ aWriteLock.unlock();
+ // <- SAFE
+
+- implts_dispatch(aParams);
++ try
++ {
++ implts_dispatch(aParams);
++ }
++ catch (...)
++ {
++ }
+ return 0;
+ }
+
+--
+1.7.5.2
+
diff --git a/libreoffice.spec b/libreoffice.spec
index 2a28b86..1de8c2d 100644
--- a/libreoffice.spec
+++ b/libreoffice.spec
@@ -95,6 +95,7 @@ Patch16: 0001-handle-NULL-display-gracefully.patch
Patch17: 0001-Resolves-rhbz-707317-avoid-crash-in-getRowSpan.patch
Patch18: 0001-Resolves-rhbz-710004-band-aid-for-immediate-crash-in.patch
Patch19: 0001-Resolves-rhbz-710556-don-t-crash-on-missing-graphics.patch
+Patch20: 0001-Related-rhbz-652604-better-survive-exceptions-thrown.patch
%{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")}
%define instdir %{_libdir}
@@ -715,6 +716,7 @@ mv -f redhat.soc extras/source/palettes/standard.soc
%patch17 -p1 -b .rhbz707317-avoid-crash-in-getRowSpan.patch
%patch18 -p1 -b .rhbz710004-band-aid-for-immediate-crash-in.patch
%patch19 -p1 -b .rhbz710556-don-t-crash-on-missing-graphics.patch
+%patch20 -p1 -b .rhbz652604-better-survive-exceptions-thrown.patch
# these are horribly incomplete--empty translations and copied english
# strings with spattering of translated strings
@@ -1996,6 +1998,7 @@ update-desktop-database %{_datadir}/applications &> /dev/null || :
%changelog
* Tue Jun 07 2011 Caolán McNamara <caolanm at redhat.com> - 3.4.0.2-4
- Resolves: rhbz#710556 't crash on missing graphics .pptx export
+- Resolves: rhbz#652604 better survive exceptions in autorecovery
* Thu Jun 02 2011 Caolán McNamara <caolanm at redhat.com> - 3.4.0.2-3
- Resolves: rhbz#710004 band aid for crash
More information about the scm-commits
mailing list