diff options
author | Joachim Lingner <jl@openoffice.org> | 2010-10-08 08:44:14 +0200 |
---|---|---|
committer | Joachim Lingner <jl@openoffice.org> | 2010-10-08 08:44:14 +0200 |
commit | 6e45443837ee59c970dfc903cfa8239669e89439 (patch) | |
tree | a3a334308a04c53fcadd26cc4755a1532588d216 | |
parent | 457fe87eda6cbea16520e1efc0ec5a05f2ae3e0c (diff) |
jl161 #i114933# solve deadlock problem when adding an extension
-rw-r--r-- | desktop/source/deployment/manager/dp_extensionmanager.cxx | 15 | ||||
-rw-r--r-- | desktop/source/deployment/manager/dp_extensionmanager.hxx | 3 |
2 files changed, 10 insertions, 8 deletions
diff --git a/desktop/source/deployment/manager/dp_extensionmanager.cxx b/desktop/source/deployment/manager/dp_extensionmanager.cxx index 71eaa2a246..c80968511d 100644 --- a/desktop/source/deployment/manager/dp_extensionmanager.cxx +++ b/desktop/source/deployment/manager/dp_extensionmanager.cxx @@ -531,7 +531,11 @@ ExtensionManager::getSupportedPackageTypes() { return m_userRepository->getSupportedPackageTypes(); } - +//Do some necessary checks and user interaction. This function does not +//aquire the extension manager mutex and that mutex must not be aquired +//when this function is called. doChecksForAddExtension does synchronous +//user interactions which may require aquiring the solar mutex. +//Returns true if the extension can be installed. bool ExtensionManager::doChecksForAddExtension( Reference<deploy::XPackageManager> const & xPackageMgr, uno::Sequence<beans::NamedValue> const & properties, @@ -708,6 +712,9 @@ Reference<deploy::XPackage> ExtensionManager::addExtension( xOldExtension, Reference<task::XAbortChannel>(), Reference<ucb::XCommandEnvironment>()); tmpExtensionRemoveGuard.reset(xExtensionBackup); + //xTmpExtension will later be used to check the dependencies + //again. However, only xExtensionBackup will be later removed + //from the tmp repository xTmpExtension = xExtensionBackup; OSL_ASSERT(xTmpExtension.is()); } @@ -783,18 +790,16 @@ Reference<deploy::XPackage> ExtensionManager::addExtension( //Use a private AbortChannel so the user cannot interrupt. try { - Reference<ucb::XCommandEnvironment> tmpCmdEnv( - new TmpRepositoryCommandEnv()); if (xExtensionBackup.is()) { Reference<deploy::XPackage> xRestored = xPackageManager->importExtension( xExtensionBackup, Reference<task::XAbortChannel>(), - tmpCmdEnv); + Reference<ucb::XCommandEnvironment>()); } activateExtension( sIdentifier, sFileName, bUserDisabled, false, - Reference<task::XAbortChannel>(), tmpCmdEnv); + Reference<task::XAbortChannel>(), Reference<ucb::XCommandEnvironment>()); } catch (...) { diff --git a/desktop/source/deployment/manager/dp_extensionmanager.hxx b/desktop/source/deployment/manager/dp_extensionmanager.hxx index ff851851b5..be86f483f1 100644 --- a/desktop/source/deployment/manager/dp_extensionmanager.hxx +++ b/desktop/source/deployment/manager/dp_extensionmanager.hxx @@ -299,9 +299,6 @@ private: getPackageManager(::rtl::OUString const & repository) throw (css::lang::IllegalArgumentException); - //Do some necessary checks and user interaction. This function does not - //aquire the extension manager mutex. - //Returns true if the extension can be installed. bool doChecksForAddExtension( css::uno::Reference<css::deployment::XPackageManager> const & xPackageMgr, css::uno::Sequence<css::beans::NamedValue> const & properties, |