From cb55deb7235eef6a2e3bc56a3c684a9e38c7ca59 Mon Sep 17 00:00:00 2001 From: "pedemont%us.ibm.com" Date: Wed, 27 Sep 2006 15:06:16 +0000 Subject: [PATCH] Remove nsJavaXPTCStub from hash table on destruction. Fix ref counting. Clean up logging. Not part of default build. Original committer: pedemont%us.ibm.com Original revision: 1.5 Original date: 2004/09/15 19:21:08 git-svn-id: svn://10.0.0.236/trunk@212466 18797224-902f-48f8-a5cc-f745e15eee43 --- .../extensions/java/xpcom/src/nsJavaXPTCStub.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/mozilla/extensions/java/xpcom/src/nsJavaXPTCStub.cpp b/mozilla/extensions/java/xpcom/src/nsJavaXPTCStub.cpp index b54a549adb0..d643dcb5618 100644 --- a/mozilla/extensions/java/xpcom/src/nsJavaXPTCStub.cpp +++ b/mozilla/extensions/java/xpcom/src/nsJavaXPTCStub.cpp @@ -61,7 +61,8 @@ nsJavaXPTCStub::~nsJavaXPTCStub() jclass clazz = mJavaEnv->GetObjectClass(mJavaObject); jstring name = (jstring) mJavaEnv->CallObjectMethod(clazz, getNameMID); const char* javaObjectName = mJavaEnv->GetStringUTFChars(name, &isCopy); - fprintf(stderr, "*** ~nsJavaXPTCStub(java_obj=%s)\n", javaObjectName); + LOG("*** ~nsJavaXPTCStub(this=0x%08x java_obj=0x%08x %s)\n", (int) this, + mJavaEnv->CallIntMethod(mJavaObject, hashCodeMID), javaObjectName); if (isCopy) mJavaEnv->ReleaseStringUTFChars(name, javaObjectName); #endif @@ -73,6 +74,8 @@ nsJavaXPTCStub::~nsJavaXPTCStub() } } + RemoveJavaXPCOMBinding(mJavaEnv, mJavaObject, this); + mJavaEnv->DeleteGlobalRef(mJavaObject); } @@ -573,7 +576,7 @@ nsJavaXPTCStub::SetupJavaParams(const nsXPTParamInfo &aParamInfo, { jobject java_stub; if (aVariant.val.p) { - java_stub = GetMatchingJavaObject(aVariant.val.p); + java_stub = GetMatchingJavaObject(mJavaEnv, aVariant.val.p); if (java_stub == nsnull) { // wrap xpcom instance @@ -1051,7 +1054,6 @@ nsJavaXPTCStub::FinalizeJavaParams(const nsXPTParamInfo &aParamInfo, // Create XPCOM stub nsJavaXPTCStub* xpcomStub = new nsJavaXPTCStub(mJavaEnv, java_obj, iinfo); - NS_ADDREF(xpcomStub); inst = SetAsXPTCStub(xpcomStub); AddJavaXPCOMBinding(mJavaEnv, java_obj, inst); } @@ -1083,9 +1085,11 @@ nsJavaXPTCStub::FinalizeJavaParams(const nsXPTParamInfo &aParamInfo, } #endif - if (IsXPTCStub(inst)) - *((void **) aVariant.val.p) = (void*) GetXPTCStubAddr(inst); - else { + if (IsXPTCStub(inst)) { + nsJavaXPTCStub* xpcomStub = GetXPTCStubAddr(inst); + NS_ADDREF(xpcomStub); + *((void **) aVariant.val.p) = (void*) xpcomStub; + } else { JavaXPCOMInstance* xpcomInst = (JavaXPCOMInstance*) inst; *((void **) aVariant.val.p) = (void*) xpcomInst->GetInstance(); }