зеркало из https://github.com/mozilla/gecko-dev.git
fix for bug 82445 stream listener leaks. r=Peter Lubczynski, sr=attinasi, a=asa@mozilla.org. fixed circular refcnt dependency between nsPluginStreamListenerPeer and nsPluginStreamInfo.
This commit is contained in:
Родитель
8388ae052d
Коммит
f7e511520e
|
@ -1005,7 +1005,6 @@ nsPluginStreamInfo::~nsPluginStreamInfo()
|
||||||
PL_strfree(mFilePath);
|
PL_strfree(mFilePath);
|
||||||
|
|
||||||
NS_IF_RELEASE(mPluginInstance);
|
NS_IF_RELEASE(mPluginInstance);
|
||||||
NS_IF_RELEASE(mPluginStreamListenerPeer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMPL_ADDREF(nsPluginStreamInfo)
|
NS_IMPL_ADDREF(nsPluginStreamInfo)
|
||||||
|
@ -1241,7 +1240,8 @@ nsPluginStreamInfo::SetPluginInstance(nsIPluginInstance * aPluginInstance)
|
||||||
void
|
void
|
||||||
nsPluginStreamInfo::SetPluginStreamListenerPeer(nsPluginStreamListenerPeer * aPluginStreamListenerPeer)
|
nsPluginStreamInfo::SetPluginStreamListenerPeer(nsPluginStreamListenerPeer * aPluginStreamListenerPeer)
|
||||||
{
|
{
|
||||||
NS_IF_ADDREF(mPluginStreamListenerPeer = aPluginStreamListenerPeer);
|
// not addref'd - nsPluginStreamInfo is owned by mPluginStreamListenerPeer
|
||||||
|
mPluginStreamListenerPeer = aPluginStreamListenerPeer;
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -1353,6 +1353,7 @@ nsPluginStreamListenerPeer::~nsPluginStreamListenerPeer()
|
||||||
NS_IF_RELEASE(mInstance);
|
NS_IF_RELEASE(mInstance);
|
||||||
NS_IF_RELEASE(mPStreamListener);
|
NS_IF_RELEASE(mPStreamListener);
|
||||||
NS_IF_RELEASE(mHost);
|
NS_IF_RELEASE(mHost);
|
||||||
|
NS_IF_RELEASE(mPluginStreamInfo);
|
||||||
|
|
||||||
// if we have mLocalFile (temp file used to post data) it should be
|
// if we have mLocalFile (temp file used to post data) it should be
|
||||||
// safe to delete it now, and hopefully the owner doesn't hold it.
|
// safe to delete it now, and hopefully the owner doesn't hold it.
|
||||||
|
@ -1397,7 +1398,10 @@ nsresult nsPluginStreamListenerPeer::Initialize(nsIURI *aURL,
|
||||||
NS_ADDREF(mPStreamListener);
|
NS_ADDREF(mPStreamListener);
|
||||||
|
|
||||||
mPluginStreamInfo = new nsPluginStreamInfo();
|
mPluginStreamInfo = new nsPluginStreamInfo();
|
||||||
|
if (!mPluginStreamInfo)
|
||||||
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
|
||||||
|
NS_ADDREF(mPluginStreamInfo);
|
||||||
mPluginStreamInfo->SetPluginInstance(aInstance);
|
mPluginStreamInfo->SetPluginInstance(aInstance);
|
||||||
mPluginStreamInfo->SetPluginStreamListenerPeer(this);
|
mPluginStreamInfo->SetPluginStreamListenerPeer(this);
|
||||||
|
|
||||||
|
@ -1448,7 +1452,10 @@ nsresult nsPluginStreamListenerPeer::InitializeEmbeded(nsIURI *aURL,
|
||||||
}
|
}
|
||||||
|
|
||||||
mPluginStreamInfo = new nsPluginStreamInfo();
|
mPluginStreamInfo = new nsPluginStreamInfo();
|
||||||
|
if (!mPluginStreamInfo)
|
||||||
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
|
||||||
|
NS_ADDREF(mPluginStreamInfo);
|
||||||
mPluginStreamInfo->SetPluginInstance(aInstance);
|
mPluginStreamInfo->SetPluginInstance(aInstance);
|
||||||
mPluginStreamInfo->SetPluginStreamListenerPeer(this);
|
mPluginStreamInfo->SetPluginStreamListenerPeer(this);
|
||||||
|
|
||||||
|
@ -1473,7 +1480,10 @@ nsresult nsPluginStreamListenerPeer::InitializeFullPage(nsIPluginInstance *aInst
|
||||||
NS_ADDREF(mInstance);
|
NS_ADDREF(mInstance);
|
||||||
|
|
||||||
mPluginStreamInfo = new nsPluginStreamInfo();
|
mPluginStreamInfo = new nsPluginStreamInfo();
|
||||||
|
if (!mPluginStreamInfo)
|
||||||
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
|
||||||
|
NS_ADDREF(mPluginStreamInfo);
|
||||||
mPluginStreamInfo->SetPluginInstance(aInstance);
|
mPluginStreamInfo->SetPluginInstance(aInstance);
|
||||||
mPluginStreamInfo->SetPluginStreamListenerPeer(this);
|
mPluginStreamInfo->SetPluginStreamListenerPeer(this);
|
||||||
|
|
||||||
|
|
|
@ -1005,7 +1005,6 @@ nsPluginStreamInfo::~nsPluginStreamInfo()
|
||||||
PL_strfree(mFilePath);
|
PL_strfree(mFilePath);
|
||||||
|
|
||||||
NS_IF_RELEASE(mPluginInstance);
|
NS_IF_RELEASE(mPluginInstance);
|
||||||
NS_IF_RELEASE(mPluginStreamListenerPeer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMPL_ADDREF(nsPluginStreamInfo)
|
NS_IMPL_ADDREF(nsPluginStreamInfo)
|
||||||
|
@ -1241,7 +1240,8 @@ nsPluginStreamInfo::SetPluginInstance(nsIPluginInstance * aPluginInstance)
|
||||||
void
|
void
|
||||||
nsPluginStreamInfo::SetPluginStreamListenerPeer(nsPluginStreamListenerPeer * aPluginStreamListenerPeer)
|
nsPluginStreamInfo::SetPluginStreamListenerPeer(nsPluginStreamListenerPeer * aPluginStreamListenerPeer)
|
||||||
{
|
{
|
||||||
NS_IF_ADDREF(mPluginStreamListenerPeer = aPluginStreamListenerPeer);
|
// not addref'd - nsPluginStreamInfo is owned by mPluginStreamListenerPeer
|
||||||
|
mPluginStreamListenerPeer = aPluginStreamListenerPeer;
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -1353,6 +1353,7 @@ nsPluginStreamListenerPeer::~nsPluginStreamListenerPeer()
|
||||||
NS_IF_RELEASE(mInstance);
|
NS_IF_RELEASE(mInstance);
|
||||||
NS_IF_RELEASE(mPStreamListener);
|
NS_IF_RELEASE(mPStreamListener);
|
||||||
NS_IF_RELEASE(mHost);
|
NS_IF_RELEASE(mHost);
|
||||||
|
NS_IF_RELEASE(mPluginStreamInfo);
|
||||||
|
|
||||||
// if we have mLocalFile (temp file used to post data) it should be
|
// if we have mLocalFile (temp file used to post data) it should be
|
||||||
// safe to delete it now, and hopefully the owner doesn't hold it.
|
// safe to delete it now, and hopefully the owner doesn't hold it.
|
||||||
|
@ -1397,7 +1398,10 @@ nsresult nsPluginStreamListenerPeer::Initialize(nsIURI *aURL,
|
||||||
NS_ADDREF(mPStreamListener);
|
NS_ADDREF(mPStreamListener);
|
||||||
|
|
||||||
mPluginStreamInfo = new nsPluginStreamInfo();
|
mPluginStreamInfo = new nsPluginStreamInfo();
|
||||||
|
if (!mPluginStreamInfo)
|
||||||
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
|
||||||
|
NS_ADDREF(mPluginStreamInfo);
|
||||||
mPluginStreamInfo->SetPluginInstance(aInstance);
|
mPluginStreamInfo->SetPluginInstance(aInstance);
|
||||||
mPluginStreamInfo->SetPluginStreamListenerPeer(this);
|
mPluginStreamInfo->SetPluginStreamListenerPeer(this);
|
||||||
|
|
||||||
|
@ -1448,7 +1452,10 @@ nsresult nsPluginStreamListenerPeer::InitializeEmbeded(nsIURI *aURL,
|
||||||
}
|
}
|
||||||
|
|
||||||
mPluginStreamInfo = new nsPluginStreamInfo();
|
mPluginStreamInfo = new nsPluginStreamInfo();
|
||||||
|
if (!mPluginStreamInfo)
|
||||||
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
|
||||||
|
NS_ADDREF(mPluginStreamInfo);
|
||||||
mPluginStreamInfo->SetPluginInstance(aInstance);
|
mPluginStreamInfo->SetPluginInstance(aInstance);
|
||||||
mPluginStreamInfo->SetPluginStreamListenerPeer(this);
|
mPluginStreamInfo->SetPluginStreamListenerPeer(this);
|
||||||
|
|
||||||
|
@ -1473,7 +1480,10 @@ nsresult nsPluginStreamListenerPeer::InitializeFullPage(nsIPluginInstance *aInst
|
||||||
NS_ADDREF(mInstance);
|
NS_ADDREF(mInstance);
|
||||||
|
|
||||||
mPluginStreamInfo = new nsPluginStreamInfo();
|
mPluginStreamInfo = new nsPluginStreamInfo();
|
||||||
|
if (!mPluginStreamInfo)
|
||||||
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
|
||||||
|
NS_ADDREF(mPluginStreamInfo);
|
||||||
mPluginStreamInfo->SetPluginInstance(aInstance);
|
mPluginStreamInfo->SetPluginInstance(aInstance);
|
||||||
mPluginStreamInfo->SetPluginStreamListenerPeer(this);
|
mPluginStreamInfo->SetPluginStreamListenerPeer(this);
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче