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
This commit is contained in:
pedemont%us.ibm.com
2006-09-27 15:18:58 +00:00
parent a7c00ef50b
commit d6eed4e3b8
2 changed files with 33 additions and 2 deletions

View File

@@ -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;

View File

@@ -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)
{