From afdf75f46024d35b8bce5bd712477fdadc6a8aa2 Mon Sep 17 00:00:00 2001 From: "alecf%netscape.com" Date: Wed, 20 Mar 2002 00:25:21 +0000 Subject: [PATCH] fix leak caused by nsLocalFile::Clone() where we were copying the refcnt to the new object - bug 124497 this ends up being more of a performance win than anyting on Unix and OS/2 r=mkaply, dbaron, sr=darin, a=asa git-svn-id: svn://10.0.0.236/trunk@116924 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/xpcom/io/nsLocalFileOS2.cpp | 23 ++++++++++------------- mozilla/xpcom/io/nsLocalFileUnix.cpp | 6 ++---- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/mozilla/xpcom/io/nsLocalFileOS2.cpp b/mozilla/xpcom/io/nsLocalFileOS2.cpp index 4c4b4a386ad..7954eb216bf 100644 --- a/mozilla/xpcom/io/nsLocalFileOS2.cpp +++ b/mozilla/xpcom/io/nsLocalFileOS2.cpp @@ -621,21 +621,18 @@ nsLocalFile::ResolveAndStat(PRBool resolveTerminal) NS_IMETHODIMP nsLocalFile::Clone(nsIFile **file) { - nsresult rv; - char * aFilePath; - GetPath(&aFilePath); - - nsCOMPtr localFile; - - rv = NS_NewLocalFile(aFilePath, mFollowSymlinks, getter_AddRefs(localFile)); - nsMemory::Free(aFilePath); + *file = nsnull; - if (NS_SUCCEEDED(rv) && localFile) - { - return localFile->QueryInterface(NS_GET_IID(nsIFile), (void**)file); - } + nsLocalFile *localFile = new nsLocalFile(*this); + if (localFile == NULL) + return NS_ERROR_OUT_OF_MEMORY; + + localFile->mRefCnt = 0; + + *file = localFile; + NS_ADDREF(*file); - return rv; + return NS_OK; } NS_IMETHODIMP diff --git a/mozilla/xpcom/io/nsLocalFileUnix.cpp b/mozilla/xpcom/io/nsLocalFileUnix.cpp index 6dcd8770c59..75b950c9cdc 100644 --- a/mozilla/xpcom/io/nsLocalFileUnix.cpp +++ b/mozilla/xpcom/io/nsLocalFileUnix.cpp @@ -243,13 +243,11 @@ nsLocalFile::Clone(nsIFile **file) CHECK_mPath(); NS_ENSURE_ARG(file); - nsCOMPtr localFile = new nsLocalFile(); + nsLocalFile *localFile = new nsLocalFile(*this); if (!localFile) return NS_ERROR_OUT_OF_MEMORY; - nsresult rv = localFile->InitWithPath(mPath); - if (NS_FAILED(rv)) - return rv; + localFile->mRefCnt = 0; *file = localFile; NS_ADDREF(*file);