Index file:
magic: c103cac3
version: 2.0
entries: 2 <---- there is an extra entry on the lru.
total bytes: 47
last file number: 0
current id: 3
table length: 65536
last crash: 1
experiment: 0
head 0: 0x90000000
tail 0: 0x90000001
size 0: 0x0
head 1: 0x0
tail 1: 0x0
size 1: 0x0
head 2: 0x0
tail 2: 0x0
size 2: 0x0
head 3: 0x0
tail 3: 0x0
size 3: 0x0
head 4: 0x0
tail 4: 0x0
size 4: 0x0
transaction: 0x0
operation: 0
operation list: 0
-------------------------
Block file: data_0
magic: c104cac3
version: 2.0
file id: 0
next file id: 0
entry size: 36
current entries: 2
max entries: 1024
updating: 0
empty sz 1: 0
empty sz 2: 1
empty sz 3: 0
empty sz 4: 255
user 0: 0x0
user 1: 0x0
user 2: 0x0
user 3: 0x0
-------------------------
Block file: data_1
magic: c104cac3
version: 2.0
file id: 1
next file id: 0
entry size: 256
current entries: 4
max entries: 1024
updating: 0
empty sz 1: 0
empty sz 2: 1
empty sz 3: 0
empty sz 4: 254
user 0: 0x0
user 1: 0x0
user 2: 0x0
user 3: 0x0
-------------------------
Block file: data_2
magic: c104cac3
version: 2.0
file id: 2
next file id: 0
entry size: 1024
current entries: 0
max entries: 0
updating: 0
empty sz 1: 0
empty sz 2: 0
empty sz 3: 0
empty sz 4: 0
user 0: 0x0
user 1: 0x0
user 2: 0x0
user 3: 0x0
-------------------------
Block file: data_3
magic: c104cac3
version: 2.0
file id: 3
next file id: 0
entry size: 4096
current entries: 0
max entries: 0
updating: 0
empty sz 1: 0
empty sz 2: 0
empty sz 3: 0
empty sz 4: 0
user 0: 0x0
user 1: 0x0
user 2: 0x0
user 3: 0x0
-------------------------
Entry at 0xa0010002
hash: 0xc24ac438
next entry: 0x0
rankings: 0x90000000
key length: 13
key: "The first key"
key addr: 0x0
reuse count: 0
refetch count: 0
state: 0
data size 0: 20
data addr 0: 0xa0010005
data size 1: 0
data addr 1: 0x0
data size 2: 0
data addr 2: 0x0
data size 3: 0
data addr 3: 0x0
----------
Rankings at 0x90000000
next: 0x90000001
prev: 0x90000000
entry: 0xa0010002
dirty: 0
pointer: 0x0
================================
Generated with: (see steps on the bug 69135)
SetMask(0x1); // 2-entry table.
SetMaxSize(0x3000); // 12 kB.
InitCache();
std::string key1("The first key");
std::string key2("The Second key");
std::string key3("The third key");
disk_cache::Entry* entry;
ASSERT_EQ(net::OK, CreateEntry(key1, &entry));
entry->Close();
ASSERT_EQ(net::OK, CreateEntry(key2, &entry));
entry->Close();
ASSERT_EQ(net::OK, CreateEntry(key3, &entry));
entry->Close();
const int kSize = 20;
ASSERT_EQ(net::OK, OpenEntry(key1, &entry));
scoped_refptr<net::IOBuffer> buf = new net::IOBuffer(kSize);
memset(buf->data(), 0, kSize);
EXPECT_EQ(kSize, WriteData(entry, 0, 0, buf, kSize, false));
entry->Close();
ASSERT_EQ(net::OK, OpenEntry(key2, &entry)); <--- 1st crash.
ASSERT_NE(net::OK, OpenEntry(key2, &entry)); <--- 2nd crash. *
ASSERT_EQ(net::OK, DoomEntry(key3));
(*) and trick the code into deleting the dirty flag.