void CacheEntry::DoomAlreadyRemoved() { LOG(("CacheEntry::DoomAlreadyRemoved [this=%p]", this)); mIsDoomed = true; if (!CacheStorageService::IsOnManagementThread()) { mozilla::MutexAutoLock lock(mLock); BackgroundOp(Ops::DOOM); return; } CacheStorageService::Self()->UnregisterEntry(this); { mozilla::MutexAutoLock lock(mLock); if (mCallbacks.Length() || mReadOnlyCallbacks.Length()) { // Must force post here since may be indirectly called from // InvokeCallbacks of this entry and we don't want reentrancy here. BackgroundOp(Ops::CALLBACKS, true); } } if (NS_SUCCEEDED(mFileStatus)) { nsresult rv = mFile->Doom(mDoomCallback ? this : nullptr); if (NS_SUCCEEDED(rv)) { LOG((" file doomed")); return; } } OnFileDoomed(NS_OK); }
void CacheEntry::DoomFile() { nsresult rv = NS_ERROR_NOT_AVAILABLE; if (NS_SUCCEEDED(mFileStatus)) { // Always calls the callback asynchronously. rv = mFile->Doom(mDoomCallback ? this : nullptr); if (NS_SUCCEEDED(rv)) { LOG((" file doomed")); return; } if (NS_ERROR_FILE_NOT_FOUND == rv) { // File is set to be just memory-only, notify the callbacks // and pretend dooming has succeeded. From point of view of // the entry it actually did - the data is gone and cannot be // reused. rv = NS_OK; } } // Always posts to the main thread. OnFileDoomed(rv); }