diff options
author | rvargas@google.com <rvargas@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-30 23:08:39 +0000 |
---|---|---|
committer | rvargas@google.com <rvargas@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-30 23:08:39 +0000 |
commit | 3c85b8003597b96007ed2e6a98007bb6f3c0ddb2 (patch) | |
tree | 3ad86fe254b1eb88d1d7ed22201721d9e1315f83 /net/disk_cache | |
parent | 10ca64313cc70fd791172d6257c607b2c80e5eff (diff) | |
download | chromium_src-3c85b8003597b96007ed2e6a98007bb6f3c0ddb2.zip chromium_src-3c85b8003597b96007ed2e6a98007bb6f3c0ddb2.tar.gz chromium_src-3c85b8003597b96007ed2e6a98007bb6f3c0ddb2.tar.bz2 |
Disk Cache: Make sure that an entry that pretends to be
"clean" is not really dirty.
If for some reason an entry is left on disk with a pointer
on the rankings node but without the dirty flag set, we now
recognize it as dirty the next time we read it from disk.
BUG=3987
TEST=DiskCacheTest.Backend_NotMarkedButDirty
Review URL: http://codereview.chromium.org/57024
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@12820 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/disk_cache')
-rw-r--r-- | net/disk_cache/backend_unittest.cc | 17 | ||||
-rw-r--r-- | net/disk_cache/entry_impl.cc | 3 |
2 files changed, 20 insertions, 0 deletions
diff --git a/net/disk_cache/backend_unittest.cc b/net/disk_cache/backend_unittest.cc index 9851203..a13762f 100644 --- a/net/disk_cache/backend_unittest.cc +++ b/net/disk_cache/backend_unittest.cc @@ -817,6 +817,23 @@ TEST_F(DiskCacheTest, Backend_InvalidEntry) { delete cache; } +// We want to be able to deal with abnormal dirty entries. +TEST_F(DiskCacheTest, Backend_NotMarkedButDirty) { + ASSERT_TRUE(CopyTestCache(L"dirty_entry")); + std::wstring path = GetCachePath(); + disk_cache::Backend* cache = disk_cache::CreateCacheBackend(path, false, 0, + net::DISK_CACHE); + ASSERT_TRUE(NULL != cache); + + disk_cache::Entry *entry1, *entry2; + ASSERT_TRUE(cache->OpenEntry("the first key", &entry1)); + EXPECT_FALSE(cache->OpenEntry("some other key", &entry2)); + entry1->Close(); + + delete cache; + EXPECT_TRUE(CheckCacheIntegrity(path)); +} + // We want to be able to deal with messed up entries on disk. TEST_F(DiskCacheTest, Backend_InvalidRankings) { ASSERT_TRUE(CopyTestCache(L"bad_rankings")); diff --git a/net/disk_cache/entry_impl.cc b/net/disk_cache/entry_impl.cc index 0173548..8ff7b21 100644 --- a/net/disk_cache/entry_impl.cc +++ b/net/disk_cache/entry_impl.cc @@ -539,6 +539,9 @@ EntryImpl* EntryImpl::Update(EntryImpl* entry) { bool EntryImpl::IsDirty(int32 current_id) { DCHECK(node_.HasData()); + if (node_.Data()->pointer && !node_.Data()->dirty) + return true; + return node_.Data()->dirty && current_id != node_.Data()->dirty; } |