Fix several memory leaks. Also, use monitors around sensetive structures.

git-svn-id: svn://10.0.0.236/trunk@169795 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
pedemont%us.ibm.com
2005-02-24 23:17:36 +00:00
parent f0f745d3f0
commit 58c0bc8ed5
7 changed files with 251 additions and 105 deletions

View File

@@ -110,7 +110,10 @@ extern NativeToJavaProxyMap* gNativeToJavaProxyMap;
class JavaToXPTCStubMap;
extern JavaToXPTCStubMap* gJavaToXPTCStubMap;
extern PRLock* gJavaXPCOMLock;
// The Java garbage collector runs in a separate thread. Since it calls the
// finalizeProxy() function in nsJavaWrapper.cpp, we need to make sure that
// all the structures touched by finalizeProxy() are multithread aware.
extern PRMonitor* gJavaXPCOMMonitor;
/**
* Initialize global structures used by Javaconnect.
@@ -154,6 +157,11 @@ private:
*/
class NativeToJavaProxyMap
{
friend PLDHashOperator DestroyJavaProxyMappingEnum(PLDHashTable* aTable,
PLDHashEntryHdr* aHeader,
PRUint32 aNumber,
void* aData);
protected:
struct ProxyList
{
@@ -179,10 +187,16 @@ public:
: mHashTable(nsnull)
{ }
~NativeToJavaProxyMap();
~NativeToJavaProxyMap()
{
NS_ASSERTION(mHashTable == nsnull,
"MUST call Destroy() before deleting object");
}
nsresult Init();
nsresult Destroy(JNIEnv* env);
nsresult Add(JNIEnv* env, nsISupports* aXPCOMObject, const nsIID& aIID,
jobject aProxy);
@@ -200,11 +214,15 @@ protected:
*/
class JavaToXPTCStubMap
{
friend PLDHashOperator DestroyXPTCMappingEnum(PLDHashTable* aTable,
PLDHashEntryHdr* aHeader,
PRUint32 aNumber, void* aData);
protected:
struct Entry : public PLDHashEntryHdr
{
jint key;
nsJavaXPTCStub* xptcstub;
jint key;
nsJavaXPTCStub* xptcstub;
};
public:
@@ -212,10 +230,16 @@ public:
: mHashTable(nsnull)
{ }
~JavaToXPTCStubMap();
~JavaToXPTCStubMap()
{
NS_ASSERTION(mHashTable == nsnull,
"MUST call Destroy() before deleting object");
}
nsresult Init();
nsresult Destroy();
nsresult Add(JNIEnv* env, jobject aJavaObject, nsJavaXPTCStub* aProxy);
nsresult Find(JNIEnv* env, jobject aJavaObject, const nsIID& aIID,
@@ -300,7 +324,7 @@ void ThrowException(JNIEnv* env, const nsresult aErrorCode,
/**
* Helper functions for converting from java.lang.String to
* nsAString/nsACstring.
* nsAString/nsACstring. Caller must delete nsAString/nsACString.
*
* @param env Java environment pointer
* @param aString Java string to convert