diff options
author | Noel Grandin <noelgrandin@gmail.com> | 2021-11-15 21:44:42 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2021-11-16 12:29:38 +0100 |
commit | 1170db278db9f1067c05d5df95faf81c1ce861bc (patch) | |
tree | 42a4b261fd099548e8bb5aea3f34dfe676d0d9cf /jvmfwk | |
parent | 2d2dc141f6d0eaa1e4737450fac707c67c05387c (diff) |
rtl::Static->thread-safe static in jvmfwk
Change-Id: I049148d82eb306e8ba7fdc9f0cc650f45b05da0c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/125257
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'jvmfwk')
-rw-r--r-- | jvmfwk/inc/fwkutil.hxx | 20 | ||||
-rw-r--r-- | jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx | 6 | ||||
-rw-r--r-- | jvmfwk/source/elements.cxx | 2 | ||||
-rw-r--r-- | jvmfwk/source/framework.cxx | 32 | ||||
-rw-r--r-- | jvmfwk/source/fwkbase.cxx | 18 | ||||
-rw-r--r-- | jvmfwk/source/fwkutil.cxx | 28 |
6 files changed, 59 insertions, 47 deletions
diff --git a/jvmfwk/inc/fwkutil.hxx b/jvmfwk/inc/fwkutil.hxx index fdef421f664f..e76a92769fc1 100644 --- a/jvmfwk/inc/fwkutil.hxx +++ b/jvmfwk/inc/fwkutil.hxx @@ -24,8 +24,8 @@ #include <sal/config.h> #include <sal/log.hxx> #include <rtl/bootstrap.hxx> -#include <rtl/instance.hxx> #include <rtl/byteseq.hxx> +#include <osl/mutex.hxx> namespace osl { class Mutex; } @@ -40,23 +40,9 @@ OUString getLibraryLocation(); /** provides a bootstrap class which already knows the values from the jvmfkwrc file. */ -struct Bootstrap : - public ::rtl::StaticWithInit< const rtl::Bootstrap *, Bootstrap > { - const rtl::Bootstrap * operator () () { - OUString sIni = getLibraryLocation() + -#ifdef MACOSX - // For some reason the jvmfwk3rc file is traditionally in - // LIBO_URE_ETC_FOLDER - "/../" LIBO_URE_ETC_FOLDER -#endif - SAL_CONFIGFILE("/jvmfwk3"); - ::rtl::Bootstrap * bootstrap = new ::rtl::Bootstrap(sIni); - SAL_INFO("jfw.level2", "Using configuration file " << sIni); - return bootstrap; - } -}; +const rtl::Bootstrap * Bootstrap(); -struct FwkMutex: public ::rtl::Static<osl::Mutex, FwkMutex> {}; +osl::Mutex& FwkMutex(); rtl::ByteSequence encodeBase16(const rtl::ByteSequence& rawData); rtl::ByteSequence decodeBase16(const rtl::ByteSequence& data); diff --git a/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx b/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx index 70d6e7888097..29de226211f1 100644 --- a/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx +++ b/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx @@ -48,7 +48,6 @@ #include <osl/process.h> #include <osl/thread.hxx> #include <osl/file.hxx> -#include <rtl/instance.hxx> #include <sal/log.hxx> #include <o3tl/char16_t2wchar_t.hxx> #include <setjmp.h> @@ -100,8 +99,6 @@ using namespace jfw_plugin; namespace { -struct PluginMutex: public ::rtl::Static<osl::Mutex, PluginMutex> {}; - #if defined(UNX) && !defined(ANDROID) OString getPluginJarPath( std::u16string_view sVendor, @@ -616,10 +613,11 @@ javaPluginError jfw_plugin_startJavaVirtualMachine( JavaVM ** ppVm, JNIEnv ** ppEnv) { + static osl::Mutex aPluginMutex; assert(pInfo != nullptr); assert(ppVm != nullptr); assert(ppEnv != nullptr); - osl::MutexGuard guard(PluginMutex::get()); + osl::MutexGuard guard(aPluginMutex); javaPluginError errorcode = javaPluginError::NONE; #ifdef MACOSX rtl::Reference<VendorBase> aVendorInfo = getJREInfoByPath( pInfo->sLocation ); diff --git a/jvmfwk/source/elements.cxx b/jvmfwk/source/elements.cxx index f5bdce32696d..c48f942ef8e8 100644 --- a/jvmfwk/source/elements.cxx +++ b/jvmfwk/source/elements.cxx @@ -961,7 +961,7 @@ void MergedSettings::getVmParametersArray(std::vector<OUString> * parParams) const { assert(parParams != nullptr); - osl::MutexGuard guard(FwkMutex::get()); + osl::MutexGuard guard(FwkMutex()); *parParams = m_vmParams; } diff --git a/jvmfwk/source/framework.cxx b/jvmfwk/source/framework.cxx index ad1f636f00d0..40bbf629a36f 100644 --- a/jvmfwk/source/framework.cxx +++ b/jvmfwk/source/framework.cxx @@ -58,7 +58,7 @@ javaFrameworkError jfw_findAllJREs(std::vector<std::unique_ptr<JavaInfo>> *pparI assert(pparInfo != nullptr); try { - osl::MutexGuard guard(jfw::FwkMutex::get()); + osl::MutexGuard guard(jfw::FwkMutex()); jfw::VendorSettings aVendorSettings; std::vector<std::unique_ptr<JavaInfo>> vecInfo; @@ -137,7 +137,7 @@ javaFrameworkError jfw_startVM( try { - osl::MutexGuard guard(jfw::FwkMutex::get()); + osl::MutexGuard guard(jfw::FwkMutex()); //We keep this pointer so we can determine if a VM has already //been created. @@ -298,7 +298,7 @@ javaFrameworkError jfw_findAndSelectJRE(std::unique_ptr<JavaInfo> *pInfo) javaFrameworkError errcode = JFW_E_NONE; try { - osl::MutexGuard guard(jfw::FwkMutex::get()); + osl::MutexGuard guard(jfw::FwkMutex()); if (jfw::getMode() == jfw::JFW_MODE_DIRECT) return JFW_E_DIRECT_MODE; std::unique_ptr<JavaInfo> aCurrentInfo; @@ -436,7 +436,7 @@ javaFrameworkError jfw_getSelectedJRE(std::unique_ptr<JavaInfo> *ppInfo) javaFrameworkError errcode = JFW_E_NONE; try { - osl::MutexGuard guard(jfw::FwkMutex::get()); + osl::MutexGuard guard(jfw::FwkMutex()); if (jfw::getMode() == jfw::JFW_MODE_DIRECT) { @@ -480,7 +480,7 @@ javaFrameworkError jfw_getSelectedJRE(std::unique_ptr<JavaInfo> *ppInfo) bool jfw_isVMRunning() { - osl::MutexGuard guard(jfw::FwkMutex::get()); + osl::MutexGuard guard(jfw::FwkMutex()); return g_pJavaVM != nullptr; } @@ -490,7 +490,7 @@ javaFrameworkError jfw_getJavaInfoByPath(OUString const & pPath, std::unique_ptr javaFrameworkError errcode = JFW_E_NONE; try { - osl::MutexGuard guard(jfw::FwkMutex::get()); + osl::MutexGuard guard(jfw::FwkMutex()); jfw::VendorSettings aVendorSettings; @@ -526,7 +526,7 @@ javaFrameworkError jfw_setSelectedJRE(JavaInfo const *pInfo) javaFrameworkError errcode = JFW_E_NONE; try { - osl::MutexGuard guard(jfw::FwkMutex::get()); + osl::MutexGuard guard(jfw::FwkMutex()); if (jfw::getMode() == jfw::JFW_MODE_DIRECT) return JFW_E_DIRECT_MODE; //check if pInfo is the selected JRE @@ -556,7 +556,7 @@ javaFrameworkError jfw_setEnabled(bool bEnabled) javaFrameworkError errcode = JFW_E_NONE; try { - osl::MutexGuard guard(jfw::FwkMutex::get()); + osl::MutexGuard guard(jfw::FwkMutex()); if (jfw::getMode() == jfw::JFW_MODE_DIRECT) return JFW_E_DIRECT_MODE; @@ -592,7 +592,7 @@ javaFrameworkError jfw_getEnabled(bool *pbEnabled) { if (jfw::getMode() == jfw::JFW_MODE_DIRECT) return JFW_E_DIRECT_MODE; - osl::MutexGuard guard(jfw::FwkMutex::get()); + osl::MutexGuard guard(jfw::FwkMutex()); jfw::MergedSettings settings; *pbEnabled = settings.getEnabled(); } @@ -610,7 +610,7 @@ javaFrameworkError jfw_setVMParameters(std::vector<OUString> const & arOptions) javaFrameworkError errcode = JFW_E_NONE; try { - osl::MutexGuard guard(jfw::FwkMutex::get()); + osl::MutexGuard guard(jfw::FwkMutex()); if (jfw::getMode() == jfw::JFW_MODE_DIRECT) return JFW_E_DIRECT_MODE; jfw::NodeJava node(jfw::NodeJava::USER); @@ -631,7 +631,7 @@ javaFrameworkError jfw_getVMParameters(std::vector<OUString> * parOptions) javaFrameworkError errcode = JFW_E_NONE; try { - osl::MutexGuard guard(jfw::FwkMutex::get()); + osl::MutexGuard guard(jfw::FwkMutex()); if (jfw::getMode() == jfw::JFW_MODE_DIRECT) return JFW_E_DIRECT_MODE; @@ -651,7 +651,7 @@ javaFrameworkError jfw_setUserClassPath(OUString const & pCp) javaFrameworkError errcode = JFW_E_NONE; try { - osl::MutexGuard guard(jfw::FwkMutex::get()); + osl::MutexGuard guard(jfw::FwkMutex()); if (jfw::getMode() == jfw::JFW_MODE_DIRECT) return JFW_E_DIRECT_MODE; jfw::NodeJava node(jfw::NodeJava::USER); @@ -672,7 +672,7 @@ javaFrameworkError jfw_getUserClassPath(OUString * ppCP) javaFrameworkError errcode = JFW_E_NONE; try { - osl::MutexGuard guard(jfw::FwkMutex::get()); + osl::MutexGuard guard(jfw::FwkMutex()); if (jfw::getMode() == jfw::JFW_MODE_DIRECT) return JFW_E_DIRECT_MODE; const jfw::MergedSettings settings; @@ -691,7 +691,7 @@ javaFrameworkError jfw_addJRELocation(OUString const & sLocation) javaFrameworkError errcode = JFW_E_NONE; try { - osl::MutexGuard guard(jfw::FwkMutex::get()); + osl::MutexGuard guard(jfw::FwkMutex()); if (jfw::getMode() == jfw::JFW_MODE_DIRECT) return JFW_E_DIRECT_MODE; jfw::NodeJava node(jfw::NodeJava::USER); @@ -730,12 +730,12 @@ javaFrameworkError jfw_existJRE(const JavaInfo *pInfo, bool *exist) void jfw_lock() { - jfw::FwkMutex::get().acquire(); + jfw::FwkMutex().acquire(); } void jfw_unlock() { - jfw::FwkMutex::get().release(); + jfw::FwkMutex().release(); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/jvmfwk/source/fwkbase.cxx b/jvmfwk/source/fwkbase.cxx index fc2223fd842e..0af34a443f3c 100644 --- a/jvmfwk/source/fwkbase.cxx +++ b/jvmfwk/source/fwkbase.cxx @@ -69,7 +69,7 @@ OString getVendorSettingsPath(OUString const & sURL) OUString getParam(OUString const & name) { OUString retVal; - bool b = Bootstrap::get()->getFrom(name, retVal); + bool b = Bootstrap()->getFrom(name, retVal); SAL_INFO( "jfw", "Using bootstrap parameter " << name << " = \"" << retVal << "\"" @@ -221,7 +221,7 @@ VersionInfo VendorSettings::getVersionInformation(std::u16string_view sVendor) c { OUString sName = UNO_JAVA_JFW_PARAMETER + OUString::number(i); OUString sValue; - if (Bootstrap::get()->getFrom(sName, sValue)) + if (Bootstrap()->getFrom(sName, sValue)) { OString sParam = OUStringToOString(sValue, osl_getThreadTextEncoding()); @@ -250,7 +250,7 @@ OString BootParams::getClasspath() { OString sClassPath; OUString sCP; - if (Bootstrap::get()->getFrom( UNO_JAVA_JFW_CLASSPATH, sCP )) + if (Bootstrap()->getFrom( UNO_JAVA_JFW_CLASSPATH, sCP )) { sClassPath = OUStringToOString(sCP, PathEncoding()); SAL_INFO( @@ -260,7 +260,7 @@ OString BootParams::getClasspath() } OUString sEnvCP; - if (Bootstrap::get()->getFrom( UNO_JAVA_JFW_ENV_CLASSPATH, sEnvCP )) + if (Bootstrap()->getFrom( UNO_JAVA_JFW_ENV_CLASSPATH, sEnvCP )) { char * pCp = getenv("CLASSPATH"); if (pCp) @@ -279,7 +279,7 @@ OString BootParams::getClasspath() OUString BootParams::getVendorSettings() { OUString sVendor; - if (Bootstrap::get()->getFrom(UNO_JAVA_JFW_VENDOR_SETTINGS, sVendor)) + if (Bootstrap()->getFrom(UNO_JAVA_JFW_VENDOR_SETTINGS, sVendor)) { //check the value of the bootstrap variable jfw::FileStatus s = checkFileURL(sVendor); @@ -316,8 +316,8 @@ OUString BootParams::getJREHome() { OUString sJRE; OUString sEnvJRE; - bool bJRE = Bootstrap::get()->getFrom(UNO_JAVA_JFW_JREHOME, sJRE); - bool bEnvJRE = Bootstrap::get()->getFrom(UNO_JAVA_JFW_ENV_JREHOME, sEnvJRE); + bool bJRE = Bootstrap()->getFrom(UNO_JAVA_JFW_JREHOME, sJRE); + bool bEnvJRE = Bootstrap()->getFrom(UNO_JAVA_JFW_ENV_JREHOME, sEnvJRE); if (bJRE && bEnvJRE) { @@ -370,7 +370,7 @@ OUString BootParams::getJREHome() OUString BootParams::getClasspathUrls() { OUString sParams; - Bootstrap::get()->getFrom( UNO_JAVA_JFW_CLASSPATH_URLS, sParams); + Bootstrap()->getFrom( UNO_JAVA_JFW_CLASSPATH_URLS, sParams); SAL_INFO( "jfw.level2", "Using bootstrap parameter " UNO_JAVA_JFW_CLASSPATH_URLS " = " @@ -388,7 +388,7 @@ JFW_MODE getMode() //check if either of the "direct mode" bootstrap variables is set bool bDirectMode = true; OUString sValue; - const rtl::Bootstrap * aBoot = Bootstrap::get(); + const rtl::Bootstrap * aBoot = Bootstrap(); if (!aBoot->getFrom(UNO_JAVA_JFW_JREHOME, sValue)) { if (!aBoot->getFrom(UNO_JAVA_JFW_ENV_JREHOME, sValue)) diff --git a/jvmfwk/source/fwkutil.cxx b/jvmfwk/source/fwkutil.cxx index a3be17ea1d48..ee083f064926 100644 --- a/jvmfwk/source/fwkutil.cxx +++ b/jvmfwk/source/fwkutil.cxx @@ -41,6 +41,34 @@ using namespace osl; namespace jfw { +/** provides a bootstrap class which already knows the values from the + jvmfkwrc file. +*/ +const rtl::Bootstrap* Bootstrap() +{ + static const rtl::Bootstrap* SINGLETON = []() + { + OUString sIni = getLibraryLocation() + +#ifdef MACOSX + // For some reason the jvmfwk3rc file is traditionally in + // LIBO_URE_ETC_FOLDER + "/../" LIBO_URE_ETC_FOLDER +#endif + SAL_CONFIGFILE("/jvmfwk3"); + ::rtl::Bootstrap * bootstrap = new ::rtl::Bootstrap(sIni); + SAL_INFO("jfw.level2", "Using configuration file " << sIni); + return bootstrap; + }(); + return SINGLETON; +}; + +osl::Mutex& FwkMutex() +{ + static osl::Mutex SINGLETON; + return SINGLETON; +} + + rtl::ByteSequence encodeBase16(const rtl::ByteSequence& rawData) { static const char EncodingTable[] = |