From 231ae169ea6af5df82042adcac17e50e8d24655e Mon Sep 17 00:00:00 2001 From: "pedemont%us.ibm.com" Date: Wed, 6 Oct 2004 22:13:00 +0000 Subject: [PATCH] Use NS_ProxyRelease to make sure XPCOM objects are released on the correct thread. Not part of default build. git-svn-id: svn://10.0.0.236/trunk@163322 18797224-902f-48f8-a5cc-f745e15eee43 --- .../java/xpcom/nsJavaInterfaces.cpp | 26 +++++++++---------- .../java/xpcom/nsJavaXPCOMBindingUtils.h | 2 +- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/mozilla/extensions/java/xpcom/nsJavaInterfaces.cpp b/mozilla/extensions/java/xpcom/nsJavaInterfaces.cpp index eb25042d10c..c68448bbd85 100644 --- a/mozilla/extensions/java/xpcom/nsJavaInterfaces.cpp +++ b/mozilla/extensions/java/xpcom/nsJavaInterfaces.cpp @@ -45,6 +45,8 @@ #include "nsIInputStream.h" #include "nsEnumeratorUtils.h" #include "nsArray.h" +#include "nsEventQueueUtils.h" +#include "nsProxyRelease.h" #define GECKO_NATIVE(func) Java_org_mozilla_xpcom_GeckoEmbed_##func #define XPCOM_NATIVE(func) Java_org_mozilla_xpcom_XPCOM_##func @@ -554,20 +556,16 @@ XPCOM_NATIVE(FinalizeStub) (JNIEnv *env, jclass that, jobject aJavaObject) #endif void* obj = GetMatchingXPCOMObject(env, aJavaObject); - RemoveJavaXPCOMBinding(env, aJavaObject, nsnull); + NS_ASSERTION(!IsXPTCStub(obj), "Expecting JavaXPCOMInstance, got nsJavaXPTCStub"); + nsISupports* xpcom_obj = ((JavaXPCOMInstance*)obj)->GetInstance(); - nsISupports* xpcom_obj = nsnull; - if (IsXPTCStub(obj)) { - GetXPTCStubAddr(obj)->QueryInterface(NS_GET_IID(nsISupports), - (void**) &xpcom_obj); - } else { - JavaXPCOMInstance* inst = (JavaXPCOMInstance*) obj; - xpcom_obj = inst->GetInstance(); - // XXX Getting some odd thread issues when calling delete. Addreffing for - // now to work around the errors. -// NS_ADDREF(inst); - delete inst; - } - NS_RELEASE(xpcom_obj); + RemoveJavaXPCOMBinding(env, aJavaObject, nsnull); + delete (JavaXPCOMInstance*) obj; + + nsCOMPtr eventQ; + nsresult rv = NS_GetMainEventQ(getter_AddRefs(eventQ)); + if (NS_SUCCEEDED(rv)) + rv = NS_ProxyRelease(eventQ, xpcom_obj); + NS_ASSERTION(NS_SUCCEEDED(rv), "Failed to get MainEventQ"); } diff --git a/mozilla/extensions/java/xpcom/nsJavaXPCOMBindingUtils.h b/mozilla/extensions/java/xpcom/nsJavaXPCOMBindingUtils.h index 9f6af65248e..013150f439c 100644 --- a/mozilla/extensions/java/xpcom/nsJavaXPCOMBindingUtils.h +++ b/mozilla/extensions/java/xpcom/nsJavaXPCOMBindingUtils.h @@ -124,7 +124,7 @@ public: nsIInterfaceInfo* InterfaceInfo(); private: - nsCOMPtr mInstance; + nsISupports* mInstance; nsCOMPtr mIInfo; };