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 2014/06/26 11:27:21 UTC
svn commit: r1605718 - in
/subversion/trunk/subversion/bindings/javahl/native: ./ jniwrapper/
Author: brane
Date: Thu Jun 26 09:27:21 2014
New Revision: 1605718
URL: http://svn.apache.org/r1605718
Log:
Fix the JavaHL class cache implementation to make the code re-entrant.
[in subversion/bindings/javahl/native]
* jniwrapper/jni_object.hpp (ClassCache::get_*):
Change the factory methods to require a JNI environment parameter.
* jniwrapper/jni_class_cache.cpp
(ClassCacheImpl::m_env): Remove cached JNI environment.
(ClassCacheImpl::static_init): Require a JNI environment parameter.
(ClassCacheImpl::get_*): Likewise.
(ClassCache::get_*): Update; forward JNI environment to ClassCacheImpl.
* jniwrapper/jni_string_map.hpp
(BaseMap::Set::impl, BaseMap::Iterator::impl, BaseMap::Entry::impl):
Require a JNI environment parameter and forward it to the
ClassCache factory methods.
* AuthnCallback.hpp, AuthnCallback.cpp,
Credential.hpp, Credential.cpp, EditorCallbacks.hpp,
ExternalItem.cpp, Prompter.cpp, SubversionException.hpp
jniwrapper/jni_base.cpp, jniwrapper/jni_channel.hpp,
jniwrapper/jni_channel.cpp, jniwrapper/jni_io_stream.hpp,
jniwrapper/jni_list.hpp, jniwrapper/jni_list.cpp,
jniwrapper/jni_string_map.hpp, jniwrapper/jni_string_map.cpp:
Update all uses of ClassCache and the static impl factories
to forward the JNI environment that's already available from
the Java native method implementations.
Modified:
subversion/trunk/subversion/bindings/javahl/native/AuthnCallback.cpp
subversion/trunk/subversion/bindings/javahl/native/AuthnCallback.hpp
subversion/trunk/subversion/bindings/javahl/native/Credential.cpp
subversion/trunk/subversion/bindings/javahl/native/Credential.hpp
subversion/trunk/subversion/bindings/javahl/native/EditorCallbacks.hpp
subversion/trunk/subversion/bindings/javahl/native/ExternalItem.cpp
subversion/trunk/subversion/bindings/javahl/native/Prompter.cpp
subversion/trunk/subversion/bindings/javahl/native/SubversionException.hpp
subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_base.cpp
subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_channel.cpp
subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_channel.hpp
subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_class_cache.cpp
subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_io_stream.hpp
subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_list.cpp
subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_list.hpp
subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_object.hpp
subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_string_map.cpp
subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_string_map.hpp
Modified: subversion/trunk/subversion/bindings/javahl/native/AuthnCallback.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/AuthnCallback.cpp?rev=1605718&r1=1605717&r2=1605718&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/AuthnCallback.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/AuthnCallback.cpp Thu Jun 26 09:27:21 2014
@@ -161,7 +161,7 @@ AuthnCallback::SSLServerCertFailures::Cl
AuthnCallback::SSLServerCertFailures::SSLServerCertFailures(
::Java::Env env, jint failures)
: ::Java::Object(env,
- ::Java::ClassCache::get_authn_ssl_server_cert_failures())
+ ::Java::ClassCache::get_authn_ssl_server_cert_failures(env))
{
set_this(env.NewObject(get_class(), impl().m_mid_ctor, failures));
}
@@ -194,7 +194,7 @@ AuthnCallback::SSLServerCertInfo::SSLSer
const ::Java::String& issuer,
const ::Java::String& der)
: ::Java::Object(env,
- ::Java::ClassCache::get_authn_ssl_server_cert_info())
+ ::Java::ClassCache::get_authn_ssl_server_cert_info(env))
{
set_this(env.NewObject(get_class(), impl().m_mid_ctor,
hostname.get(), fingerprint.get(),
Modified: subversion/trunk/subversion/bindings/javahl/native/AuthnCallback.hpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/AuthnCallback.hpp?rev=1605718&r1=1605717&r2=1605718&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/AuthnCallback.hpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/AuthnCallback.hpp Thu Jun 26 09:27:21 2014
@@ -52,7 +52,7 @@ public:
* The constructor does not verify the class of the wrapped object.
*/
explicit AuthnResult(::Java::Env env, jobject jthis)
- : ::Java::Object(env, ::Java::ClassCache::get_authn_result(), jthis)
+ : ::Java::Object(env, ::Java::ClassCache::get_authn_result(env), jthis)
{}
bool save() const
@@ -193,7 +193,7 @@ public:
* The constructor does not verify the class of the wrapped object.
*/
explicit AuthnCallback(::Java::Env env, jobject jthis)
- : ::Java::Object(env, ::Java::ClassCache::get_authn_cb(), jthis)
+ : ::Java::Object(env, ::Java::ClassCache::get_authn_cb(env), jthis)
{}
/**
@@ -285,7 +285,7 @@ public:
* The constructor does not verify the class of the wrapped object.
*/
explicit UserPasswordCallback(::Java::Env env, jobject jthis)
- : ::Java::Object(env, ::Java::ClassCache::get_user_passwd_cb(), jthis)
+ : ::Java::Object(env, ::Java::ClassCache::get_user_passwd_cb(env), jthis)
{}
/**
Modified: subversion/trunk/subversion/bindings/javahl/native/Credential.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/Credential.cpp?rev=1605718&r1=1605717&r2=1605718&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/Credential.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/Credential.cpp Thu Jun 26 09:27:21 2014
@@ -52,7 +52,7 @@ Credential::Credential(::Java::Env env,
const ::Java::String& password,
jobject info, jobject failures,
const ::Java::String& passphrase)
- : ::Java::Object(env, ::Java::ClassCache::get_credential())
+ : ::Java::Object(env, ::Java::ClassCache::get_credential(env))
{
set_this(env.NewObject(get_class(), impl().m_mid_ctor,
kind, realm.get(), store.get(),
@@ -76,7 +76,7 @@ Credential::Kind::ClassImpl::~ClassImpl(
Credential::Kind::Kind(::Java::Env env,
const ::Java::String& value)
- : ::Java::Object(env, ::Java::ClassCache::get_credential_kind())
+ : ::Java::Object(env, ::Java::ClassCache::get_credential_kind(env))
{
set_this(env.CallStaticObjectMethod(
get_class(), impl().m_static_mid_from_string, value.get()));
Modified: subversion/trunk/subversion/bindings/javahl/native/Credential.hpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/Credential.hpp?rev=1605718&r1=1605717&r2=1605718&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/Credential.hpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/Credential.hpp Thu Jun 26 09:27:21 2014
@@ -81,7 +81,7 @@ public:
* The constructor does not verify the class of the wrapped object.
*/
explicit Credential(::Java::Env env, jobject jthis)
- : ::Java::Object(env, ::Java::ClassCache::get_credential(), jthis)
+ : ::Java::Object(env, ::Java::ClassCache::get_credential(env), jthis)
{}
/**
Modified: subversion/trunk/subversion/bindings/javahl/native/EditorCallbacks.hpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/EditorCallbacks.hpp?rev=1605718&r1=1605717&r2=1605718&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/EditorCallbacks.hpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/EditorCallbacks.hpp Thu Jun 26 09:27:21 2014
@@ -47,7 +47,7 @@ public:
*/
explicit ProvideBaseCallback(::Java::Env env, jobject jthis)
: ::Java::Object(env,
- ::Java::ClassCache::get_editor_provide_base_cb(),
+ ::Java::ClassCache::get_editor_provide_base_cb(env),
jthis)
{}
@@ -69,7 +69,7 @@ public:
*/
explicit ReturnValue(::Java::Env env, jobject jthis)
: Java::Object(env,
- ::Java::ClassCache::get_editor_provide_base_cb_ret(),
+ ::Java::ClassCache::get_editor_provide_base_cb_ret(env),
jthis)
{}
@@ -167,7 +167,7 @@ public:
*/
explicit ProvidePropsCallback(::Java::Env env, jobject jthis)
: ::Java::Object(env,
- ::Java::ClassCache::get_editor_provide_props_cb(),
+ ::Java::ClassCache::get_editor_provide_props_cb(env),
jthis)
{}
@@ -188,7 +188,7 @@ public:
*/
explicit ReturnValue(::Java::Env env, jobject jthis)
: Java::Object(env,
- ::Java::ClassCache::get_editor_provide_props_cb_ret(),
+ ::Java::ClassCache::get_editor_provide_props_cb_ret(env),
jthis)
{}
@@ -284,7 +284,7 @@ public:
*/
explicit GetNodeKindCallback(::Java::Env env, jobject jthis)
: ::Java::Object(env,
- ::Java::ClassCache::get_editor_get_kind_cb(),
+ ::Java::ClassCache::get_editor_get_kind_cb(env),
jthis)
{}
Modified: subversion/trunk/subversion/bindings/javahl/native/ExternalItem.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/ExternalItem.cpp?rev=1605718&r1=1605717&r2=1605718&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/ExternalItem.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/ExternalItem.cpp Thu Jun 26 09:27:21 2014
@@ -82,7 +82,7 @@ make_external_item(::Java::Env env,
} // anonymous namespace
ExternalItem::ExternalItem(::Java::Env env, jobject jthis)
- : Object(env, ::Java::ClassCache::get_external_item(), jthis),
+ : Object(env, ::Java::ClassCache::get_external_item(env), jthis),
m_target_dir(env, get_string_field(env, jthis, impl().m_fid_target_dir)),
m_url(env, get_string_field(env, jthis, impl().m_fid_url)),
m_revision(get_revision_field(env, jthis, impl().m_fid_revision)),
@@ -94,7 +94,7 @@ ExternalItem::ExternalItem(::Java::Env e
const char* url,
const svn_opt_revision_t* revision,
const svn_opt_revision_t* peg_revision)
- : Object(env, ::Java::ClassCache::get_external_item()),
+ : Object(env, ::Java::ClassCache::get_external_item(env)),
m_target_dir(env, target_dir),
m_url(env, url),
m_revision(*revision),
Modified: subversion/trunk/subversion/bindings/javahl/native/Prompter.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/Prompter.cpp?rev=1605718&r1=1605717&r2=1605718&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/Prompter.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/Prompter.cpp Thu Jun 26 09:27:21 2014
@@ -51,7 +51,7 @@ Prompter::UniquePtr Prompter::create(job
const ::Java::Env jenv;
try
{
- const jclass cls = ::Java::ClassCache::get_authn_cb()->get_class();
+ const jclass cls = ::Java::ClassCache::get_authn_cb(jenv)->get_class();
if (!jenv.IsInstanceOf(jprompter, cls))
return UniquePtr(NULL);
@@ -445,7 +445,8 @@ Prompter::UniquePtr CompatPrompter::crea
const ::Java::Env jenv;
try
{
- const jclass cls = ::Java::ClassCache::get_user_passwd_cb()->get_class();
+ const jclass cls =
+ ::Java::ClassCache::get_user_passwd_cb(jenv)->get_class();
if (!jenv.IsInstanceOf(jprompter, cls))
return UniquePtr(NULL);
Modified: subversion/trunk/subversion/bindings/javahl/native/SubversionException.hpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/SubversionException.hpp?rev=1605718&r1=1605717&r2=1605718&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/SubversionException.hpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/SubversionException.hpp Thu Jun 26 09:27:21 2014
@@ -41,7 +41,7 @@ class SubversionException : public ::Jav
{
public:
explicit SubversionException(::Java::Env env)
- : Java::Exception(env, ::Java::ClassCache::get_subversion_exception())
+ : Java::Exception(env, ::Java::ClassCache::get_subversion_exception(env))
{}
private:
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=1605718&r1=1605717&r2=1605718&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_base.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_base.cpp Thu Jun 26 09:27:21 2014
@@ -220,7 +220,7 @@ MethodID Class::m_mid_get_name;
void Class::static_init(Env env, jclass cls)
{
m_mid_get_class = env.GetMethodID(
- ClassCache::get_object()->get_class(),
+ ClassCache::get_object(env)->get_class(),
"getClass", "()Ljava/lang/Class;");
m_mid_get_name = env.GetMethodID(
cls, "getName", "()Ljava/lang/String;");
@@ -343,7 +343,7 @@ void handle_svn_error(Env env, ::svn_err
{
cause = env.ExceptionOccurred();
if (env.IsInstanceOf(
- cause, ClassCache::get_subversion_exception()->get_class()))
+ cause, ClassCache::get_subversion_exception(env)->get_class()))
{
// XXX FIXME: Should really have a special error code
// specifically for propagating Java exceptions from
Modified: subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_channel.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_channel.cpp?rev=1605718&r1=1605717&r2=1605718&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_channel.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_channel.cpp Thu Jun 26 09:27:21 2014
@@ -135,7 +135,7 @@ ByteChannel::ByteBuffer::ClassImpl::~Cla
jint ByteChannel::read(jobject destination)
{
- const ByteBuffer::ClassImpl& bufimpl = ByteBuffer::impl();
+ const ByteBuffer::ClassImpl& bufimpl = ByteBuffer::impl(m_env);
const jint remaining = get_remaining(m_env, destination,
bufimpl.m_mid_get_remaining);
@@ -196,7 +196,7 @@ jint ByteChannel::read(jobject destinati
jint ByteChannel::write(jobject source)
{
- const ByteBuffer::ClassImpl& bufimpl = ByteBuffer::impl();
+ const ByteBuffer::ClassImpl& bufimpl = ByteBuffer::impl(m_env);
const jint remaining = get_remaining(m_env, source,
bufimpl.m_mid_get_remaining);
Modified: subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_channel.hpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_channel.hpp?rev=1605718&r1=1605717&r2=1605718&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_channel.hpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_channel.hpp Thu Jun 26 09:27:21 2014
@@ -154,9 +154,10 @@ private:
};
static const char* const m_class_name;
- static const ClassImpl& impl()
+ static const ClassImpl& impl(Env env)
{
- return *dynamic_cast<const ClassImpl*>(ClassCache::get_byte_buffer());
+ return *dynamic_cast<const ClassImpl*>(
+ ClassCache::get_byte_buffer(env));
}
};
};
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=1605718&r1=1605717&r2=1605718&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 Thu Jun 26 09:27:21 2014
@@ -101,11 +101,9 @@ class ClassCacheImpl
{
friend class ClassCache;
- const Env m_env;
// We only statically initialize a few of the common class wrappers.
- explicit ClassCacheImpl(Env env)
- : m_env(env),
+ explicit ClassCacheImpl(Env env) :
#define JNIWRAPPER_INIT_CACHED_CLASS(M, C) \
m_impl_##M(new C::ClassImpl(env, env.FindClass(C::m_class_name)))
@@ -120,10 +118,10 @@ class ClassCacheImpl
// We can't do this in the constructor above, because the satic
// initializers will expect that ClassCache::m_impl is already set;
// that doesn't happen until the constructor returns.
- void static_init()
+ void static_init(Env env)
{
-#define JNIWRAPPER_STATIC_CACHED_CLASS(M, C) \
- C::static_init(m_env, m_impl_##M->get_class())
+#define JNIWRAPPER_STATIC_CACHED_CLASS(M, C) \
+ C::static_init(env, m_impl_##M->get_class())
// No-op JNIWRAPPER_STATIC_CACHED_CLASS(object, Object);
JNIWRAPPER_STATIC_CACHED_CLASS(classtype, Class);
@@ -136,7 +134,7 @@ class ClassCacheImpl
// therefore do not need atomic access.
#define JNIWRAPPER_DEFINE_CACHED_CLASS(M, C) \
std::auto_ptr<Object::ClassImpl> m_impl_##M; \
- const Object::ClassImpl* get_##M() \
+ const Object::ClassImpl* get_##M(Env) \
{ \
return m_impl_##M.get(); \
}
@@ -150,14 +148,14 @@ class ClassCacheImpl
// All other class wrappers must be atomically initialized
#define JNIWRAPPER_DEFINE_CACHED_CLASS(M, C) \
ClassImplPtr m_impl_##M; \
- const Object::ClassImpl* get_##M() \
+ const Object::ClassImpl* get_##M(Env env) \
{ \
Object::ClassImpl* pimpl = m_impl_##M.get(); \
if (!pimpl) \
{ \
std::auto_ptr<Object::ClassImpl> tmp( \
new C::ClassImpl( \
- m_env, m_env.FindClass(C::m_class_name))); \
+ env, env.FindClass(C::m_class_name))); \
pimpl = m_impl_##M.test_and_set(tmp.get()); \
if (!pimpl) \
pimpl = tmp.release(); \
@@ -224,8 +222,9 @@ void ClassCache::create()
try
{
- m_impl = new ClassCacheImpl(Env());
- m_impl->static_init();
+ const Env env;
+ m_impl = new ClassCacheImpl(env);
+ m_impl->static_init(env);
}
catch (const SignalExceptionThrown&)
{}
@@ -270,9 +269,9 @@ void ClassCache::destroy()
}
#define JNIWRAPPER_IMPL_CLASS_CACHE_ACCESSOR(M) \
-const Object::ClassImpl* ClassCache::get_##M() \
+const Object::ClassImpl* ClassCache::get_##M(Env env) \
{ \
- return m_impl->get_##M(); \
+ return m_impl->get_##M(env); \
}
JNIWRAPPER_IMPL_CLASS_CACHE_ACCESSOR(object);
Modified: subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_io_stream.hpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_io_stream.hpp?rev=1605718&r1=1605717&r2=1605718&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_io_stream.hpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_io_stream.hpp Thu Jun 26 09:27:21 2014
@@ -49,7 +49,7 @@ public:
* Constructs a wrapper around an existing @c InputStream @a jstream.
*/
explicit InputStream(Env env, jobject jstream)
- : Object(env, ClassCache::get_input_stream(), jstream)
+ : Object(env, ClassCache::get_input_stream(env), jstream)
{}
/**
@@ -177,7 +177,7 @@ public:
* Constructs a wrapper around an existing @c OutputStream @a jstream.
*/
explicit OutputStream(Env env, jobject jstream)
- : Object(env, ClassCache::get_output_stream(), jstream)
+ : Object(env, ClassCache::get_output_stream(env), jstream)
{}
/**
Modified: subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_list.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_list.cpp?rev=1605718&r1=1605717&r2=1605718&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_list.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_list.cpp Thu Jun 26 09:27:21 2014
@@ -40,7 +40,8 @@ BaseList::ClassImpl::~ClassImpl() {}
BaseList::ovector
BaseList::convert_to_vector(Env env, jobject jlist)
{
- const ClassImpl* pimpl = dynamic_cast<const ClassImpl*>(ClassCache::get_list());
+ const ClassImpl* pimpl =
+ dynamic_cast<const ClassImpl*>(ClassCache::get_list(env));
const jint length = env.CallIntMethod(jlist, pimpl->m_mid_size);
if (!length)
Modified: subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_list.hpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_list.hpp?rev=1605718&r1=1605717&r2=1605718&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_list.hpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_list.hpp Thu Jun 26 09:27:21 2014
@@ -58,7 +58,7 @@ protected:
* @c std::vector.
*/
explicit BaseList(Env env, jobject jlist)
- : Object(env, ClassCache::get_list(), jlist),
+ : Object(env, ClassCache::get_list(env), jlist),
m_contents(convert_to_vector(env, m_jthis))
{}
@@ -197,7 +197,7 @@ protected:
* Constructs the list wrapper, deriving the class from @a jlist.
*/
explicit BaseMutableList(Env env, jobject jlist)
- : Object(env, ClassCache::get_array_list(), jlist)
+ : Object(env, ClassCache::get_array_list(env), jlist)
{}
/**
@@ -205,7 +205,7 @@ protected:
* with initial allocation size @a length.
*/
explicit BaseMutableList(Env env, jint length)
- : Object(env, ClassCache::get_array_list())
+ : Object(env, ClassCache::get_array_list(env))
{
set_this(env.NewObject(get_class(), impl().m_mid_ctor, length));
}
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=1605718&r1=1605717&r2=1605718&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_object.hpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_object.hpp Thu Jun 26 09:27:21 2014
@@ -164,7 +164,7 @@ public:
static void destroy();
#define JNIWRAPPER_DECLARE_CACHED_CLASS_ACCESSOR(M) \
- static const Object::ClassImpl* get_##M();
+ static const Object::ClassImpl* get_##M(Env env);
JNIWRAPPER_DECLARE_CACHED_CLASS_ACCESSOR(object);
JNIWRAPPER_DECLARE_CACHED_CLASS_ACCESSOR(classtype);
Modified: subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_string_map.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_string_map.cpp?rev=1605718&r1=1605717&r2=1605718&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_string_map.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_string_map.cpp Thu Jun 26 09:27:21 2014
@@ -87,7 +87,8 @@ jobject BaseMap::operator[](const std::s
BaseMap::somap BaseMap::convert_to_map(Env env, jobject jmap)
{
- const ClassImpl* pimpl = dynamic_cast<const ClassImpl*>(ClassCache::get_map());
+ const ClassImpl* pimpl =
+ dynamic_cast<const ClassImpl*>(ClassCache::get_map(env));
if (!env.CallIntMethod(jmap, pimpl->m_mid_size))
return somap();
@@ -95,10 +96,10 @@ BaseMap::somap BaseMap::convert_to_map(E
// Get an iterator over the map's entry set
const jobject entries = env.CallObjectMethod(jmap, pimpl->m_mid_entry_set);
const jobject iterator = env.CallObjectMethod(entries,
- Set::impl().m_mid_iterator);
+ Set::impl(env).m_mid_iterator);
- const Iterator::ClassImpl& iterimpl = Iterator::impl();
- const Entry::ClassImpl& entimpl = Entry::impl();
+ const Iterator::ClassImpl& iterimpl = Iterator::impl(env);
+ const Entry::ClassImpl& entimpl = Entry::impl(env);
// Yterate over the map, filling the native map
somap contents;
Modified: subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_string_map.hpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_string_map.hpp?rev=1605718&r1=1605717&r2=1605718&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_string_map.hpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_string_map.hpp Thu Jun 26 09:27:21 2014
@@ -59,7 +59,7 @@ protected:
* @c std::map.
*/
explicit BaseMap(Env env, jobject jmap)
- : Object(env, ClassCache::get_map(), jmap),
+ : Object(env, ClassCache::get_map(env), jmap),
m_contents(convert_to_map(env, m_jthis))
{}
@@ -117,9 +117,9 @@ private:
};
static const char* const m_class_name;
- static const ClassImpl& impl()
+ static const ClassImpl& impl(Env env)
{
- return *dynamic_cast<const ClassImpl*>(ClassCache::get_set());
+ return *dynamic_cast<const ClassImpl*>(ClassCache::get_set(env));
}
};
@@ -143,9 +143,9 @@ private:
};
static const char* const m_class_name;
- static const ClassImpl& impl()
+ static const ClassImpl& impl(Env env)
{
- return *dynamic_cast<const ClassImpl*>(ClassCache::get_iterator());
+ return *dynamic_cast<const ClassImpl*>(ClassCache::get_iterator(env));
}
};
@@ -169,9 +169,9 @@ private:
};
static const char* const m_class_name;
- static const ClassImpl& impl()
+ static const ClassImpl& impl(Env env)
{
- return *dynamic_cast<const ClassImpl*>(ClassCache::get_map_entry());
+ return *dynamic_cast<const ClassImpl*>(ClassCache::get_map_entry(env));
}
};
};
@@ -277,7 +277,7 @@ protected:
* Constructs the map wrapper, deriving the class from @a jmap.
*/
explicit BaseMutableMap(Env env, jobject jmap)
- : Object(env, ClassCache::get_hash_map(), jmap)
+ : Object(env, ClassCache::get_hash_map(env), jmap)
{}
/**
@@ -285,7 +285,7 @@ protected:
* with initial allocation size @a length.
*/
explicit BaseMutableMap(Env env, jint length)
- : Object(env, ClassCache::get_hash_map())
+ : Object(env, ClassCache::get_hash_map(env))
{
set_this(env.NewObject(get_class(), impl().m_mid_ctor, length));
}