diff options
author | Petr Mladek <pmladek@suse.cz> | 2011-01-13 21:13:19 +0100 |
---|---|---|
committer | Petr Mladek <pmladek@hopik.site> | 2011-01-14 19:24:27 +0100 |
commit | 2c2774f3a20f35f9f5320efa9e7d1f37bb860266 (patch) | |
tree | 2f0e042f4825d213ff93f5f13e5fdad18273d075 | |
parent | 8539854f9af2c423d69ab9a89c79d3dbb8c6abd3 (diff) |
unopkg crasher on SLED11-SP1 (bnc#655912)
activateExtension call broke memory if dp_misc::getIdentifier and xNewExtension
were called inline; the problem was visible only with gcc-4.3.4 and did not
appear with older or newer gcc versions
valgrind got happy and unopkg stopped crashing after the values were passed via
the extra variables
it looks like a miscompilation; IMHO, it does not make sense to report it
because it does not happen with last gcc version
this code is not critical for the performance, so the workaround with
extra variables is fine; they might even be optimized out by the compiler
Signed off by Michael, Noel, Tor
-rw-r--r-- | desktop/source/deployment/manager/dp_extensionmanager.cxx | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/desktop/source/deployment/manager/dp_extensionmanager.cxx b/desktop/source/deployment/manager/dp_extensionmanager.cxx index c6529ec0e8..11b38cdc88 100644 --- a/desktop/source/deployment/manager/dp_extensionmanager.cxx +++ b/desktop/source/deployment/manager/dp_extensionmanager.cxx @@ -740,9 +740,13 @@ Reference<deploy::XPackage> ExtensionManager::addExtension( if (repository.equals(OUSTR("user"))) bUserDisabled2 = false; + // pass the two values via variables to workaround gcc-4.3.4 specific bug (bnc#655912) + OUString sNewExtensionIdentifier = dp_misc::getIdentifier(xNewExtension); + OUString sNewExtensionFileName = xNewExtension->getName(); + activateExtension( - dp_misc::getIdentifier(xNewExtension), - xNewExtension->getName(), bUserDisabled2, false, xAbortChannel, + sNewExtensionIdentifier, sNewExtensionFileName, + bUserDisabled2, false, xAbortChannel, Reference<ucb::XCommandEnvironment>()); } else |