[Libreoffice-commits] core.git: Branch 'libreoffice-3-6' - desktop/source

Stephan Bergmann sbergman at redhat.com
Thu Feb 7 06:43:33 PST 2013


 desktop/source/deployment/registry/component/dp_component.cxx |   22 ++++++++--
 1 file changed, 18 insertions(+), 4 deletions(-)

New commits:
commit 7d4db696e196714697027ace98c368dae6b8a86b
Author: Stephan Bergmann <sbergman at redhat.com>
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/1996
    Reviewed-by: Miklos Vajna <vmiklos at suse.cz>
    Tested-by: Miklos Vajna <vmiklos at suse.cz>

diff --git a/desktop/source/deployment/registry/component/dp_component.cxx b/desktop/source/deployment/registry/component/dp_component.cxx
index 1243087..3baba8c 100644
--- a/desktop/source/deployment/registry/component/dp_component.cxx
+++ b/desktop/source/deployment/registry/component/dp_component.cxx
@@ -1478,14 +1478,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))
@@ -1496,7 +1497,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);


More information about the Libreoffice-commits mailing list