Fix bug 35564 '[MLK] Potential nsIIOService Leak' - integrated Patrick's changes

git-svn-id: svn://10.0.0.236/trunk@78546 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
gordon%netscape.com 2000-09-08 23:31:26 +00:00
parent 6373b92293
commit 9fae4dd645

View File

@ -42,6 +42,14 @@
#include "nsXPIDLString.h"
#include "prio.h" // for read/write flags, permissions, etc.
// Helper, to simplify getting the I/O service.
inline const nsGetServiceByCID
do_GetIOService(nsresult* error = 0)
{
static NS_DEFINE_CID(kIOServiceCID, NS_IOSERVICE_CID);
return nsGetServiceByCID(kIOServiceCID, 0, error);
}
inline nsresult
NS_NewURI(nsIURI* *result,
const char* spec,
@ -50,20 +58,14 @@ NS_NewURI(nsIURI* *result,
{
nsresult rv;
nsIIOService* serv = ioService;
static NS_DEFINE_CID(kIOServiceCID, NS_IOSERVICE_CID);
if (serv == nsnull) {
rv = nsServiceManager::GetService(kIOServiceCID, NS_GET_IID(nsIIOService),
(nsISupports**)&serv);
if (NS_FAILED(rv)) return rv;
}
rv = serv->NewURI(spec, baseURI, result);
nsCOMPtr<nsIIOService> serv;
if (ioService == nsnull) {
(void)nsServiceManager::ReleaseService(kIOServiceCID, serv);
serv = do_GetIOService(&rv);
if (NS_FAILED(rv)) return rv;
ioService = serv.get();
}
return rv;
return ioService->NewURI(spec, baseURI, result);
}
inline nsresult
@ -92,16 +94,15 @@ NS_OpenURI(nsIChannel* *result,
{
nsresult rv;
nsIIOService* serv = ioService;
static NS_DEFINE_CID(kIOServiceCID, NS_IOSERVICE_CID);
if (serv == nsnull) {
rv = nsServiceManager::GetService(kIOServiceCID, NS_GET_IID(nsIIOService),
(nsISupports**)&serv);
nsCOMPtr<nsIIOService> serv;
if (ioService == nsnull) {
serv = do_GetIOService(&rv);
if (NS_FAILED(rv)) return rv;
ioService = serv.get();
}
nsIChannel* channel = nsnull;
rv = serv->NewChannelFromURI(uri, &channel);
rv = ioService->NewChannelFromURI(uri, &channel);
if (NS_FAILED(rv)) return rv;
if (loadGroup) {
@ -125,10 +126,6 @@ NS_OpenURI(nsIChannel* *result,
if (NS_FAILED(rv)) return rv;
}
if (ioService == nsnull) {
(void)nsServiceManager::ReleaseService(kIOServiceCID, serv);
}
*result = channel;
return rv;
}
@ -231,22 +228,16 @@ NS_NewPostDataStream(nsIInputStream **result,
nsIIOService* ioService = nsnull) // pass in nsIIOService to optimize callers
{
nsresult rv;
nsCOMPtr<nsIIOService> serv;
nsIIOService* serv = ioService;
static NS_DEFINE_CID(kIOServiceCID, NS_IOSERVICE_CID);
if (serv == nsnull) {
rv = nsServiceManager::GetService(kIOServiceCID, NS_GET_IID(nsIIOService),
(nsISupports**)&serv);
if (ioService == nsnull) {
serv = do_GetIOService(&rv);
if (NS_FAILED(rv)) return rv;
ioService = serv.get();
}
nsCOMPtr<nsIProtocolHandler> handler;
rv = serv->GetProtocolHandler("http", getter_AddRefs(handler));
if (ioService == nsnull) {
(void)nsServiceManager::ReleaseService(kIOServiceCID, serv);
}
rv = ioService->GetProtocolHandler("http", getter_AddRefs(handler));
if (NS_FAILED(rv)) return rv;
nsCOMPtr<nsIHTTPProtocolHandler> http = do_QueryInterface(handler, &rv);