From 45e5c5eaa309cdcf52dce043ffa3abffc3b4c1e1 Mon Sep 17 00:00:00 2001 From: "pedemont%us.ibm.com" Date: Wed, 13 Jul 2005 22:15:09 +0000 Subject: [PATCH] Fix crash when calling initEmbedding with an appFileLocProvider. Don't delete the locProvider proxy after having called NS_InitEmbedding. Not part of default build. a=mkaply git-svn-id: svn://10.0.0.236/trunk@176061 18797224-902f-48f8-a5cc-f745e15eee43 --- .../java/xpcom/nsAppFileLocProviderProxy.cpp | 17 +++++++++++++++++ .../java/xpcom/nsAppFileLocProviderProxy.h | 5 +++++ .../extensions/java/xpcom/nsJavaInterfaces.cpp | 11 ++++------- 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/mozilla/extensions/java/xpcom/nsAppFileLocProviderProxy.cpp b/mozilla/extensions/java/xpcom/nsAppFileLocProviderProxy.cpp index d0e90f46dd8..ff4bd56fe81 100644 --- a/mozilla/extensions/java/xpcom/nsAppFileLocProviderProxy.cpp +++ b/mozilla/extensions/java/xpcom/nsAppFileLocProviderProxy.cpp @@ -234,3 +234,20 @@ nsAppFileLocProviderProxy::GetFiles(const char* aProp, return rv; } + +//////////////////////////////////////////////////////////////////////////////// + +nsresult +NS_NewAppFileLocProviderProxy(jobject aJavaLocProvider, + nsIDirectoryServiceProvider** aResult) +{ + nsAppFileLocProviderProxy* provider = + new nsAppFileLocProviderProxy(aJavaLocProvider); + if (provider == nsnull) + return NS_ERROR_OUT_OF_MEMORY; + NS_ADDREF(provider); + + *aResult = provider; + return NS_OK; +} + diff --git a/mozilla/extensions/java/xpcom/nsAppFileLocProviderProxy.h b/mozilla/extensions/java/xpcom/nsAppFileLocProviderProxy.h index 4c3ca515069..d3b90880d6c 100644 --- a/mozilla/extensions/java/xpcom/nsAppFileLocProviderProxy.h +++ b/mozilla/extensions/java/xpcom/nsAppFileLocProviderProxy.h @@ -56,5 +56,10 @@ private: jobject mJavaLocProvider; }; +extern "C" nsresult +NS_NewAppFileLocProviderProxy(jobject aJavaLocProvider, + nsIDirectoryServiceProvider** aResult); + + #endif //_nsAppFileLocProviderProxy_h_ diff --git a/mozilla/extensions/java/xpcom/nsJavaInterfaces.cpp b/mozilla/extensions/java/xpcom/nsJavaInterfaces.cpp index ed6e0d2f470..2b0e86f5ef2 100644 --- a/mozilla/extensions/java/xpcom/nsJavaInterfaces.cpp +++ b/mozilla/extensions/java/xpcom/nsJavaInterfaces.cpp @@ -69,18 +69,15 @@ InitEmbedding_Impl(JNIEnv* env, jobject aMozBinDirectory, } // create nsAppFileLocProviderProxy from given Java object - nsAppFileLocProviderProxy* provider = nsnull; + nsCOMPtr provider; if (aAppFileLocProvider) { - provider = new nsAppFileLocProviderProxy(aAppFileLocProvider); - if (!provider) - return NS_ERROR_OUT_OF_MEMORY; + rv = NS_NewAppFileLocProviderProxy(aAppFileLocProvider, + getter_AddRefs(provider)); + NS_ENSURE_SUCCESS(rv, rv); } // init Gecko rv = NS_InitEmbedding(directory, provider); - if (provider) { - delete provider; - } NS_ENSURE_SUCCESS(rv, rv); // init Event Queue