desktop/source/deployment/registry/component/dp_component.cxx | 22 ++++++++-- 1 file changed, 18 insertions(+), 4 deletions(-)
New commits: commit 34fd6bf1e59a0a8bdbb31adad7df5cac713501c6 Author: Stephan Bergmann <[email protected]> Date: Tue Feb 5 13:03:31 2013 +0100 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 <[email protected]> Tested-by: Miklos Vajna <[email protected]> diff --git a/desktop/source/deployment/registry/component/dp_component.cxx b/desktop/source/deployment/registry/component/dp_component.cxx index e974034..d2410bb 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); _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
