From 2ddf7cd9af86011107526aa01e3efb11d1da62b2 Mon Sep 17 00:00:00 2001 From: "rpotts%netscape.com" Date: Wed, 21 Oct 1998 09:26:33 +0000 Subject: [PATCH] Fixed bug #1159. Reference counting bug related to forms... git-svn-id: svn://10.0.0.236/trunk@13244 18797224-902f-48f8-a5cc-f745e15eee43 --- .../html/document/src/nsHTMLDocument.cpp | 21 ++++++++++++------- .../html/document/src/nsHTMLDocument.cpp | 21 ++++++++++++------- 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/mozilla/content/html/document/src/nsHTMLDocument.cpp b/mozilla/content/html/document/src/nsHTMLDocument.cpp index 53adbc127e7..c69744e695a 100644 --- a/mozilla/content/html/document/src/nsHTMLDocument.cpp +++ b/mozilla/content/html/document/src/nsHTMLDocument.cpp @@ -2199,17 +2199,23 @@ nsHTMLDocument::AddForm(nsIDOMHTMLFormElement *aForm) if (nsnull == aForm) { return NS_ERROR_NULL_POINTER; } - if (!mForms) { - nsIDOMHTMLCollection* forms = nsnull; - GetForms(&forms); - } + nsIContent* iContent = nsnull; nsresult result = aForm->QueryInterface(kIContentIID, (void**)&iContent); if ((NS_OK == result) && iContent) { - if (mForms->Add(iContent)) { - NS_RELEASE(iContent); - return NS_OK; + nsIDOMHTMLCollection* forms = nsnull; + + // Initialize mForms if necessary... + if (nsnull == mForms) { + nsIDOMHTMLCollection* forms = nsnull; + result = GetForms(&forms); + NS_IF_RELEASE(forms); } + + if (NS_SUCCEEDED(result)) { + mForms->Add(iContent); + } + NS_RELEASE(iContent); } return result; } @@ -2223,6 +2229,7 @@ nsHTMLDocument::GetForms(nsIDOMHTMLCollection** aForms) if (nsnull == mForms) { return NS_ERROR_OUT_OF_MEMORY; } + NS_ADDREF(mForms); } *aForms = (nsIDOMHTMLCollection *)mForms; diff --git a/mozilla/layout/html/document/src/nsHTMLDocument.cpp b/mozilla/layout/html/document/src/nsHTMLDocument.cpp index 53adbc127e7..c69744e695a 100644 --- a/mozilla/layout/html/document/src/nsHTMLDocument.cpp +++ b/mozilla/layout/html/document/src/nsHTMLDocument.cpp @@ -2199,17 +2199,23 @@ nsHTMLDocument::AddForm(nsIDOMHTMLFormElement *aForm) if (nsnull == aForm) { return NS_ERROR_NULL_POINTER; } - if (!mForms) { - nsIDOMHTMLCollection* forms = nsnull; - GetForms(&forms); - } + nsIContent* iContent = nsnull; nsresult result = aForm->QueryInterface(kIContentIID, (void**)&iContent); if ((NS_OK == result) && iContent) { - if (mForms->Add(iContent)) { - NS_RELEASE(iContent); - return NS_OK; + nsIDOMHTMLCollection* forms = nsnull; + + // Initialize mForms if necessary... + if (nsnull == mForms) { + nsIDOMHTMLCollection* forms = nsnull; + result = GetForms(&forms); + NS_IF_RELEASE(forms); } + + if (NS_SUCCEEDED(result)) { + mForms->Add(iContent); + } + NS_RELEASE(iContent); } return result; } @@ -2223,6 +2229,7 @@ nsHTMLDocument::GetForms(nsIDOMHTMLCollection** aForms) if (nsnull == mForms) { return NS_ERROR_OUT_OF_MEMORY; } + NS_ADDREF(mForms); } *aForms = (nsIDOMHTMLCollection *)mForms;