summaryrefslogtreecommitdiff
path: root/jvmfwk
diff options
context:
space:
mode:
authorNoel Grandin <noelgrandin@gmail.com>2021-11-15 21:44:42 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2021-11-16 12:29:38 +0100
commit1170db278db9f1067c05d5df95faf81c1ce861bc (patch)
tree42a4b261fd099548e8bb5aea3f34dfe676d0d9cf /jvmfwk
parent2d2dc141f6d0eaa1e4737450fac707c67c05387c (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.hxx20
-rw-r--r--jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx6
-rw-r--r--jvmfwk/source/elements.cxx2
-rw-r--r--jvmfwk/source/framework.cxx32
-rw-r--r--jvmfwk/source/fwkbase.cxx18
-rw-r--r--jvmfwk/source/fwkutil.cxx28
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[] =