summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2013-02-05 13:03:31 +0100
committerMiklos Vajna <vmiklos@suse.cz>2013-02-07 14:31:05 +0000
commit34fd6bf1e59a0a8bdbb31adad7df5cac713501c6 (patch)
tree4e2e3b3c501a36a8fa549dc38d9aacf54cffe138
parent795796da79d5dd815fb2d31e8d4a244bf8d54328 (diff)
Cleanly remove components from rdb again that fail during live insertion
Such failure happens e.g. for components that bring along duplicate UNO implementation names, and if they ever got added to an rdb, LO would afterwards refuse to start forever. Change-Id: Ia62ac496547a45f5a72fdc81543f15a417c09687 (cherry picked from commit 2a31dd4025eff8d09ab207f31bacc0a5b8c36bd9) Reviewed-on: https://gerrit.libreoffice.org/1999 Reviewed-by: Miklos Vajna <vmiklos@suse.cz> Tested-by: Miklos Vajna <vmiklos@suse.cz>
-rw-r--r--desktop/source/deployment/registry/component/dp_component.cxx22
1 files changed, 18 insertions, 4 deletions
diff --git a/desktop/source/deployment/registry/component/dp_component.cxx b/desktop/source/deployment/registry/component/dp_component.cxx
index e974034d744d..d2410bb13f6f 100644
--- a/desktop/source/deployment/registry/component/dp_component.cxx
+++ b/desktop/source/deployment/registry/component/dp_component.cxx
@@ -1459,14 +1459,15 @@ void BackendImpl::ComponentPackageImpl::processPackage_(
css::uno::UNO_QUERY_THROW);
}
}
- css::uno::Reference< css::registry::XImplementationRegistration>(
+ css::uno::Reference< css::registry::XImplementationRegistration> impreg(
context->getServiceManager()->createInstanceWithContext(
rtl::OUString(
RTL_CONSTASCII_USTRINGPARAM(
"com.sun.star.registry.ImplementationRegistration")),
context),
- css::uno::UNO_QUERY_THROW)->registerImplementation(
- m_loader, url, getRDB());
+ css::uno::UNO_QUERY_THROW);
+ css::uno::Reference< css::registry::XSimpleRegistry > rdb(getRDB());
+ impreg->registerImplementation(m_loader, url, rdb);
// Only write to unorc after successful registration; it may fail if
// there is no suitable java
if (m_loader == "com.sun.star.loader.Java2" && !jarManifestHeaderPresent(url, OUSTR("UNO-Type-Path"), xCmdEnv))
@@ -1477,7 +1478,20 @@ void BackendImpl::ComponentPackageImpl::processPackage_(
std::vector< css::uno::Reference< css::uno::XInterface > > factories;
getComponentInfo(&data, startup ? 0 : &factories, context);
if (!startup) {
- componentLiveInsertion(data, factories);
+ try {
+ componentLiveInsertion(data, factories);
+ } catch (css::uno::Exception & e) {
+ SAL_INFO(
+ "desktop.deployment", "caught Exception " << e.Message);
+ try {
+ impreg->revokeImplementation(url, rdb);
+ } catch (css::uno::RuntimeException & e2) {
+ SAL_WARN(
+ "desktop.deployment",
+ "ignored RuntimeException " << e2.Message);
+ }
+ throw;
+ }
}
m_registered = REG_REGISTERED;
that->addDataToDb(url, data);