Fixed refcounting problem and possible out-of-memory condition. r=kipp

This commit is contained in:
warren%netscape.com 1999-10-10 02:08:08 +00:00
Родитель ff01d5e8f4
Коммит bb32e6e730
3 изменённых файлов: 60 добавлений и 21 удалений

Просмотреть файл

@ -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()

Просмотреть файл

@ -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()

Просмотреть файл

@ -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()