Bug 828281 - UpdateRecord in CloseOutputStream can be removed. r=michal.novotny

This commit is contained in:
Alfred Kayser 2013-02-03 17:09:48 +01:00
Родитель 0ce0423e6c
Коммит 513cb2b5df
1 изменённых файлов: 27 добавлений и 46 удалений

75
netwerk/cache/nsDiskCacheStreams.cpp поставляемый
Просмотреть файл

@ -463,66 +463,47 @@ nsDiskCacheStreamIO::Flush()
}
// write data to cache blocks, or flush mBuffer to file
NS_ASSERTION(mStreamEnd <= kMaxBufferSize, "stream is bigger than buffer");
nsDiskCacheMap *cacheMap = mDevice->CacheMap(); // get map reference
nsresult rv;
bool written = false;
if (mStreamEnd <= kMaxBufferSize) {
// store data (if any) in cache block files
nsDiskCacheRecord * record = &mBinding->mRecord;
nsresult rv = NS_OK;
// delete existing storage
nsDiskCacheRecord * record = &mBinding->mRecord;
if (record->DataLocationInitialized()) {
rv = cacheMap->DeleteStorage(record, nsDiskCache::kData);
if (NS_FAILED(rv)) {
NS_WARNING("cacheMap->DeleteStorage() failed.");
return rv;
}
}
// flush buffer to block files
written = true;
if (mStreamEnd > 0) {
rv = cacheMap->WriteDataCacheBlocks(mBinding, mBuffer, mStreamEnd);
if (NS_FAILED(rv)) {
NS_WARNING("WriteDataCacheBlocks() failed.");
written = false;
}
}
}
if (!written && mStreamEnd > 0) {
// failed to store in cacheblocks, save as separate file
rv = FlushBufferToFile(); // initializes DataFileLocation() if necessary
if (mFD) {
// Update the file size of the disk file in the cache
UpdateFileSize();
// close file descriptor
(void) PR_Close(mFD);
mFD = nullptr;
}
else
NS_WARNING("no file descriptor");
// close mFD first if possible before returning if FlushBufferToFile
// failed
NS_ENSURE_SUCCESS(rv, rv);
}
// XXX do we need this here? WriteDataCacheBlocks() calls UpdateRecord()
// update cache map if entry isn't doomed
if (!mBinding->mDoomed) {
rv = cacheMap->UpdateRecord(&mBinding->mRecord);
// Only call UpdateRecord when there is no data to write,
// because WriteDataCacheBlocks / FlushBufferToFile calls it.
if ((mStreamEnd == 0) && (!mBinding->mDoomed)) {
rv = cacheMap->UpdateRecord(record);
if (NS_FAILED(rv)) {
NS_WARNING("cacheMap->UpdateRecord() failed.");
return rv; // XXX doom cache entry
}
}
}
return NS_OK;
if (mStreamEnd == 0) return NS_OK; // nothing to write
// try to write to the cache blocks
rv = cacheMap->WriteDataCacheBlocks(mBinding, mBuffer, mStreamEnd);
if (NS_FAILED(rv)) {
NS_WARNING("WriteDataCacheBlocks() failed.");
// failed to store in cacheblocks, save as separate file
rv = FlushBufferToFile(); // initializes DataFileLocation() if necessary
if (mFD) {
UpdateFileSize();
(void) PR_Close(mFD);
mFD = nullptr;
}
else
NS_WARNING("no file descriptor");
}
return rv;
}