You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by br...@apache.org on 2013/11/06 03:15:50 UTC
svn commit: r1539212 - in
/subversion/trunk/subversion/bindings/javahl/native/jniwrapper:
jni_base.cpp jni_class_cache.cpp jni_env.hpp jni_object.hpp
Author: brane
Date: Wed Nov 6 02:15:50 2013
New Revision: 1539212
URL: http://svn.apache.org/r1539212
Log:
Declaring extern "C" functions as friends is apparently tricky if
compatibility with a wide range of compilers is important ...
so we do without them.
* subversion/bindings/javahl/native/jniwrapper/jni_env.hpp
(JNI_OnLoad): Remove friend declaration.
(Java::Env::static_init): New static initializer.
* subversion/bindings/javahl/native/jniwrapper/jni_object.hpp
(JNI_OnLoad, JNI_OnUnload): Remove friend declarations.
(Java::ClassCache::create): New static initializer.
(Java::ClassCache::destroy): New static finalizer.
* subversion/bindings/javahl/native/jniwrapper/jni_base.cpp
(Java::Env::static_init): Implement.
(JNI_OnLoad): Call Java::Env::static_init and Java::ClassCache::create.
* subversion/bindings/javahl/native/jniwrapper/jni_class_cache.cpp
(Java::ClassCache::create, Java::ClassCache::destroy): Implement.
Modified:
subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_base.cpp
subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_class_cache.cpp
subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_env.hpp
subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_object.hpp
Modified: subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_base.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_base.cpp?rev=1539212&r1=1539211&r2=1539212&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_base.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_base.cpp Wed Nov 6 02:15:50 2013
@@ -38,8 +38,8 @@
JNIEXPORT jint JNICALL
JNI_OnLoad(JavaVM* jvm, void*)
{
- ::Java::Env::m_jvm = jvm;
- new ::Java::ClassCache(::Java::Env());
+ ::Java::Env::static_init(jvm);
+ ::Java::ClassCache::create();
return JNI_VERSION_1_2;
}
@@ -50,7 +50,7 @@ JNI_OnLoad(JavaVM* jvm, void*)
JNIEXPORT void JNICALL
JNI_OnUnload(JavaVM*, void*)
{
- delete ::Java::ClassCache::m_instance;
+ ::Java::ClassCache::destroy();
}
@@ -59,6 +59,10 @@ namespace Java {
// class Java::Env
::JavaVM* Env::m_jvm = NULL;
+void Env::static_init(::JavaVM* jvm)
+{
+ m_jvm = jvm;
+}
::JNIEnv* Env::env_from_jvm()
{
Modified: subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_class_cache.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_class_cache.cpp?rev=1539212&r1=1539211&r2=1539212&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_class_cache.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_class_cache.cpp Wed Nov 6 02:15:50 2013
@@ -32,6 +32,18 @@ namespace Java {
const ClassCache* ClassCache::m_instance = NULL;
+void ClassCache::create()
+{
+ new ClassCache(Env());
+}
+
+void ClassCache::destroy()
+{
+ const ClassCache* const instance = m_instance;
+ m_instance = NULL;
+ delete instance;
+}
+
ClassCache::~ClassCache() {}
#define SVN_JAVAHL_JNIWRAPPER_CLASS_CACHE_INIT(M, C) \
Modified: subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_env.hpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_env.hpp?rev=1539212&r1=1539211&r2=1539212&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_env.hpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_env.hpp Wed Nov 6 02:15:50 2013
@@ -412,8 +412,6 @@ public:
private:
::JNIEnv* m_env;
-
- friend JNIEXPORT jint JNICALL ::JNI_OnLoad(::JavaVM*, void*);
static ::JavaVM* m_jvm;
static ::JNIEnv* env_from_jvm();
@@ -429,6 +427,10 @@ private:
}
void throw_java_out_of_memory(const char* message) const;
+
+public:
+ /* This static initializer must only be called by JNI_OnLoad */
+ static void static_init(::JavaVM*);
};
Modified: subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_object.hpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_object.hpp?rev=1539212&r1=1539211&r2=1539212&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_object.hpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_object.hpp Wed Nov 6 02:15:50 2013
@@ -130,8 +130,6 @@ private:
*/
class ClassCache
{
- friend JNIEXPORT jint JNICALL ::JNI_OnLoad(::JavaVM*, void*);
- friend JNIEXPORT void JNICALL ::JNI_OnUnload(::JavaVM*, void*);
explicit ClassCache(Env env);
~ClassCache();
@@ -152,6 +150,13 @@ class ClassCache
SVN_JAVAHL_JNIWRAPPER_CACHED_CLASS(string);
SVN_JAVAHL_JNIWRAPPER_CACHED_CLASS(subversion_exception);
#undef SVN_JAVAHL_JNIWRAPPER_CACHED_CLASS
+
+public:
+ /* This static initializer must only be called by JNI_OnLoad */
+ static void create();
+
+ /* This static finalizer must only be called by JNI_OnUnload */
+ static void destroy();
};