diff --git a/netwerk/cache/nsDiskCacheMap.cpp b/netwerk/cache/nsDiskCacheMap.cpp index 5fbd5430eda9..5410258b5b7b 100644 --- a/netwerk/cache/nsDiskCacheMap.cpp +++ b/netwerk/cache/nsDiskCacheMap.cpp @@ -369,16 +369,18 @@ nsDiskCacheMap::ShrinkRecords() PRUint32 newRecordsPerBucket = oldRecordsPerBucket; while (maxUsage < (newRecordsPerBucket >> 1)) newRecordsPerBucket >>= 1; - if (newRecordsPerBucket < kMinRecordCount) - newRecordsPerBucket = kMinRecordCount; + if (newRecordsPerBucket < (kMinRecordCount / kBuckets)) + newRecordsPerBucket = (kMinRecordCount / kBuckets); + NS_ASSERTION(newRecordsPerBucket <= oldRecordsPerBucket, + "ShrinkRecords() can't grow records!"); if (newRecordsPerBucket == oldRecordsPerBucket) return NS_OK; // Move the buckets close to each other - for (bucketIndex = 0; bucketIndex < kBuckets; ++bucketIndex) { + for (bucketIndex = 1; bucketIndex < kBuckets; ++bucketIndex) { // Move bucket memmove(mRecordArray + bucketIndex * newRecordsPerBucket, mRecordArray + bucketIndex * oldRecordsPerBucket, - mHeader.mBucketUsage[bucketIndex] * sizeof(nsDiskCacheRecord)); + newRecordsPerBucket * sizeof(nsDiskCacheRecord)); } // Shrink the record array memory block itself