From 6320eadc46e237b60f31f1e8e838bec6a637ac0c Mon Sep 17 00:00:00 2001 From: "warren%netscape.com" Date: Sun, 10 Oct 1999 02:08:08 +0000 Subject: [PATCH] Fixed refcounting problem and possible out-of-memory condition. r=kipp git-svn-id: svn://10.0.0.236/trunk@50323 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/layout/base/src/nsPluginViewer.cpp | 27 ++++++++++++++----- .../plugin/base/src/nsPluginViewer.cpp | 27 ++++++++++++++----- .../modules/plugin/nglsrc/nsPluginViewer.cpp | 27 ++++++++++++++----- 3 files changed, 60 insertions(+), 21 deletions(-) diff --git a/mozilla/layout/base/src/nsPluginViewer.cpp b/mozilla/layout/base/src/nsPluginViewer.cpp index 045a937bc75..8a18bc0462d 100644 --- a/mozilla/layout/base/src/nsPluginViewer.cpp +++ b/mozilla/layout/base/src/nsPluginViewer.cpp @@ -123,7 +123,8 @@ private: class PluginViewerImpl : public nsIContentViewer { public: - PluginViewerImpl(const char* aCommand, nsIStreamListener** aDocListener); + PluginViewerImpl(const char* aCommand); + nsresult Init(nsIStreamListener** aDocListener); NS_DECL_AND_IMPL_ZEROING_OPERATOR_NEW @@ -196,23 +197,36 @@ NS_NewPluginContentViewer(const char* aCommand, nsIStreamListener** aDocListener, nsIContentViewer** aDocViewer) { - PluginViewerImpl* it = new PluginViewerImpl(aCommand, aDocListener); + PluginViewerImpl* it = new PluginViewerImpl(aCommand); if (nsnull == it) { return NS_ERROR_OUT_OF_MEMORY; } + nsresult rv = it->Init(aDocListener); + if (NS_FAILED(rv)) { + delete it; + return rv; + } return it->QueryInterface(kIContentViewerIID, (void**) aDocViewer); } // Note: operator new zeros our memory -PluginViewerImpl::PluginViewerImpl(const char* aCommand, - nsIStreamListener** aDocListener) +PluginViewerImpl::PluginViewerImpl(const char* aCommand) { NS_INIT_REFCNT(); - nsIStreamListener* it = new PluginListener(this); - *aDocListener = it; mEnableRendering = PR_TRUE; } +nsresult +PluginViewerImpl::Init(nsIStreamListener** aDocListener) +{ + nsIStreamListener* it = new PluginListener(this); + if (it == nsnull) + return NS_ERROR_OUT_OF_MEMORY; + NS_ADDREF(it); + *aDocListener = it; + return NS_OK; +} + // ISupports implementation... NS_IMPL_ADDREF(PluginViewerImpl) NS_IMPL_RELEASE(PluginViewerImpl) @@ -592,7 +606,6 @@ PluginListener::PluginListener(PluginViewerImpl* aViewer) NS_INIT_REFCNT(); mViewer = aViewer; NS_ADDREF(aViewer); - mRefCnt = 1; } PluginListener::~PluginListener() diff --git a/mozilla/modules/plugin/base/src/nsPluginViewer.cpp b/mozilla/modules/plugin/base/src/nsPluginViewer.cpp index 045a937bc75..8a18bc0462d 100644 --- a/mozilla/modules/plugin/base/src/nsPluginViewer.cpp +++ b/mozilla/modules/plugin/base/src/nsPluginViewer.cpp @@ -123,7 +123,8 @@ private: class PluginViewerImpl : public nsIContentViewer { public: - PluginViewerImpl(const char* aCommand, nsIStreamListener** aDocListener); + PluginViewerImpl(const char* aCommand); + nsresult Init(nsIStreamListener** aDocListener); NS_DECL_AND_IMPL_ZEROING_OPERATOR_NEW @@ -196,23 +197,36 @@ NS_NewPluginContentViewer(const char* aCommand, nsIStreamListener** aDocListener, nsIContentViewer** aDocViewer) { - PluginViewerImpl* it = new PluginViewerImpl(aCommand, aDocListener); + PluginViewerImpl* it = new PluginViewerImpl(aCommand); if (nsnull == it) { return NS_ERROR_OUT_OF_MEMORY; } + nsresult rv = it->Init(aDocListener); + if (NS_FAILED(rv)) { + delete it; + return rv; + } return it->QueryInterface(kIContentViewerIID, (void**) aDocViewer); } // Note: operator new zeros our memory -PluginViewerImpl::PluginViewerImpl(const char* aCommand, - nsIStreamListener** aDocListener) +PluginViewerImpl::PluginViewerImpl(const char* aCommand) { NS_INIT_REFCNT(); - nsIStreamListener* it = new PluginListener(this); - *aDocListener = it; mEnableRendering = PR_TRUE; } +nsresult +PluginViewerImpl::Init(nsIStreamListener** aDocListener) +{ + nsIStreamListener* it = new PluginListener(this); + if (it == nsnull) + return NS_ERROR_OUT_OF_MEMORY; + NS_ADDREF(it); + *aDocListener = it; + return NS_OK; +} + // ISupports implementation... NS_IMPL_ADDREF(PluginViewerImpl) NS_IMPL_RELEASE(PluginViewerImpl) @@ -592,7 +606,6 @@ PluginListener::PluginListener(PluginViewerImpl* aViewer) NS_INIT_REFCNT(); mViewer = aViewer; NS_ADDREF(aViewer); - mRefCnt = 1; } PluginListener::~PluginListener() diff --git a/mozilla/modules/plugin/nglsrc/nsPluginViewer.cpp b/mozilla/modules/plugin/nglsrc/nsPluginViewer.cpp index 045a937bc75..8a18bc0462d 100644 --- a/mozilla/modules/plugin/nglsrc/nsPluginViewer.cpp +++ b/mozilla/modules/plugin/nglsrc/nsPluginViewer.cpp @@ -123,7 +123,8 @@ private: class PluginViewerImpl : public nsIContentViewer { public: - PluginViewerImpl(const char* aCommand, nsIStreamListener** aDocListener); + PluginViewerImpl(const char* aCommand); + nsresult Init(nsIStreamListener** aDocListener); NS_DECL_AND_IMPL_ZEROING_OPERATOR_NEW @@ -196,23 +197,36 @@ NS_NewPluginContentViewer(const char* aCommand, nsIStreamListener** aDocListener, nsIContentViewer** aDocViewer) { - PluginViewerImpl* it = new PluginViewerImpl(aCommand, aDocListener); + PluginViewerImpl* it = new PluginViewerImpl(aCommand); if (nsnull == it) { return NS_ERROR_OUT_OF_MEMORY; } + nsresult rv = it->Init(aDocListener); + if (NS_FAILED(rv)) { + delete it; + return rv; + } return it->QueryInterface(kIContentViewerIID, (void**) aDocViewer); } // Note: operator new zeros our memory -PluginViewerImpl::PluginViewerImpl(const char* aCommand, - nsIStreamListener** aDocListener) +PluginViewerImpl::PluginViewerImpl(const char* aCommand) { NS_INIT_REFCNT(); - nsIStreamListener* it = new PluginListener(this); - *aDocListener = it; mEnableRendering = PR_TRUE; } +nsresult +PluginViewerImpl::Init(nsIStreamListener** aDocListener) +{ + nsIStreamListener* it = new PluginListener(this); + if (it == nsnull) + return NS_ERROR_OUT_OF_MEMORY; + NS_ADDREF(it); + *aDocListener = it; + return NS_OK; +} + // ISupports implementation... NS_IMPL_ADDREF(PluginViewerImpl) NS_IMPL_RELEASE(PluginViewerImpl) @@ -592,7 +606,6 @@ PluginListener::PluginListener(PluginViewerImpl* aViewer) NS_INIT_REFCNT(); mViewer = aViewer; NS_ADDREF(aViewer); - mRefCnt = 1; } PluginListener::~PluginListener()