From d6eed4e3b82a32056cda41adfbcc8255bb7b4e0e Mon Sep 17 00:00:00 2001 From: "pedemont%us.ibm.com" Date: Wed, 27 Sep 2006 15:18:58 +0000 Subject: [PATCH] Bug 285591 - Do not cache JNIEnv structure. Instead, query from JavaVM. Not part of default build. a=mkaply Original committer: pedemont%us.ibm.com Original revision: 1.33 Original date: 2005/05/03 20:15:35 git-svn-id: svn://10.0.0.236/trunk@212694 18797224-902f-48f8-a5cc-f745e15eee43 --- .../java/xpcom/src/nsJavaWrapper.cpp | 2 +- .../xpcom/src/nsJavaXPCOMBindingUtils.cpp | 33 ++++++++++++++++++- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/mozilla/extensions/java/xpcom/src/nsJavaWrapper.cpp b/mozilla/extensions/java/xpcom/src/nsJavaWrapper.cpp index 90f06289336..996cfb66308 100644 --- a/mozilla/extensions/java/xpcom/src/nsJavaWrapper.cpp +++ b/mozilla/extensions/java/xpcom/src/nsJavaWrapper.cpp @@ -734,7 +734,7 @@ SetupParams(JNIEnv *env, const jobject aParam, PRUint8 aType, PRBool aIsOut, NS_STATIC_CAST(nsXPTCStubBase*, xpcom_obj)); nsJavaXPTCStubWeakRef* weakref; - weakref = new nsJavaXPTCStubWeakRef(env, java_obj, stub); + weakref = new nsJavaXPTCStubWeakRef(java_obj, stub); if (!weakref) { rv = NS_ERROR_OUT_OF_MEMORY; break; diff --git a/mozilla/extensions/java/xpcom/src/nsJavaXPCOMBindingUtils.cpp b/mozilla/extensions/java/xpcom/src/nsJavaXPCOMBindingUtils.cpp index 7c2d46fc44e..e9dd786ee35 100644 --- a/mozilla/extensions/java/xpcom/src/nsJavaXPCOMBindingUtils.cpp +++ b/mozilla/extensions/java/xpcom/src/nsJavaXPCOMBindingUtils.cpp @@ -47,6 +47,9 @@ /* Java JNI globals */ + +JavaVM* gCachedJVM = nsnull; + jclass booleanClass = nsnull; jclass charClass = nsnull; jclass byteClass = nsnull; @@ -93,6 +96,24 @@ PRBool gJavaXPCOMInitialized = PR_FALSE; PRLock* gJavaXPCOMLock = nsnull; +/****************************** + * JNI Load & Unload + ******************************/ +extern "C" JX_EXPORT jint JNICALL +JNI_OnLoad(JavaVM* vm, void* reserved) +{ + // Save pointer to JavaVM, which is valid across threads. + gCachedJVM = vm; + + // Let the JVM know that we are using JDK 1.2 JNI features. + return JNI_VERSION_1_2; +} + +extern "C" JX_EXPORT void JNICALL +JNI_OnUnload(JavaVM* vm, void* reserved) +{ +} + /****************************** * InitializeJavaGlobals ******************************/ @@ -777,7 +798,7 @@ GetNewOrUsedXPCOMObject(JNIEnv* env, jobject aJavaObject, const nsIID& aIID, return rv; // Create XPCOM stub - stub = new nsJavaXPTCStub(env, aJavaObject, iinfo); + stub = new nsJavaXPTCStub(aJavaObject, iinfo); if (!stub) { return NS_ERROR_OUT_OF_MEMORY; } @@ -849,6 +870,16 @@ GetIIDForMethodParam(nsIInterfaceInfo *iinfo, const nsXPTMethodInfo *methodInfo, * JNI helper functions *******************************/ +JNIEnv* +GetJNIEnv() +{ + JNIEnv* env; + jint rc = gCachedJVM->GetEnv((void**) &env, JNI_VERSION_1_2); + NS_ASSERTION(rc == JNI_OK && env != nsnull, + "Current thread not attached to given JVM instance"); + return env; +} + void ThrowException(JNIEnv* env, const nsresult aErrorCode, const char* aMessage) {