Bug 399096 - nsDOMCacheUpdateService leaks. r=dcamp, sr=biesi, a=blocker

This commit is contained in:
jwalden@mit.edu 2007-11-08 21:12:59 -08:00
parent 96835a98c9
commit 4f2801da87
2 changed files with 29 additions and 9 deletions

View File

@ -419,9 +419,10 @@ nsOfflineCacheUpdate::Init(PRBool aPartialUpdate,
nsresult rv;
// Make sure the service has been initialized
if (!nsOfflineCacheUpdateService::GetInstance()) {
nsOfflineCacheUpdateService* service =
nsOfflineCacheUpdateService::EnsureService();
if (!service)
return NS_ERROR_FAILURE;
}
LOG(("nsOfflineCacheUpdate::Init [%p]", this));
@ -649,8 +650,8 @@ nsOfflineCacheUpdate::Finish()
mState = STATE_FINISHED;
nsOfflineCacheUpdateService *service =
nsOfflineCacheUpdateService::GetInstance();
nsOfflineCacheUpdateService* service =
nsOfflineCacheUpdateService::EnsureService();
if (!mPartialUpdate) {
if (mSucceeded) {
@ -822,8 +823,8 @@ nsOfflineCacheUpdate::Schedule()
{
LOG(("nsOfflineCacheUpdate::Schedule [%p]", this));
nsOfflineCacheUpdateService *service =
nsOfflineCacheUpdateService::GetInstance();
nsOfflineCacheUpdateService* service =
nsOfflineCacheUpdateService::EnsureService();
if (!service) {
return NS_ERROR_FAILURE;
@ -837,8 +838,8 @@ nsOfflineCacheUpdate::ScheduleOnDocumentStop(nsIDOMDocument *aDocument)
{
LOG(("nsOfflineCacheUpdate::ScheduleOnDocumentStop [%p]", this));
nsOfflineCacheUpdateService *service =
nsOfflineCacheUpdateService::GetInstance();
nsOfflineCacheUpdateService* service =
nsOfflineCacheUpdateService::EnsureService();
if (!service) {
return NS_ERROR_FAILURE;
@ -930,6 +931,18 @@ nsOfflineCacheUpdateService::GetInstance()
return gOfflineCacheUpdateService;
}
nsOfflineCacheUpdateService *
nsOfflineCacheUpdateService::EnsureService()
{
if (!gOfflineCacheUpdateService) {
// Make the service manager hold a long-lived reference to the service
nsCOMPtr<nsIOfflineCacheUpdateService> service =
do_GetService(NS_OFFLINECACHEUPDATESERVICE_CONTRACTID);
}
return gOfflineCacheUpdateService;
}
nsresult
nsOfflineCacheUpdateService::Schedule(nsOfflineCacheUpdate *aUpdate)
{

View File

@ -177,8 +177,15 @@ public:
nsIDOMDocument *aDocument);
nsresult UpdateFinished(nsOfflineCacheUpdate *aUpdate);
static nsOfflineCacheUpdateService *GetInstance();
/**
* Returns the singleton nsOfflineCacheUpdateService without an addref, or
* nsnull if the service couldn't be created.
*/
static nsOfflineCacheUpdateService *EnsureService();
/** Addrefs and returns the singleton nsOfflineCacheUpdateService. */
static nsOfflineCacheUpdateService *GetInstance();
private:
nsresult ProcessNextUpdate();