Index file: version: 2.1 entries: 3 current id: 1 last crash: 1 head 0: 0x90000002 tail 0: 0x90000002 size 0: 0x1 head 1: 0x90000001 <---- tail 1: 0x90000000 size 1: 0x2 transaction: 0x0 ------------------------- Entry at 0xa0010002 hash: 0x687d1422 next entry: 0x0 rankings: 0x90000000 key length: 13 key: "the first key" key addr: 0x0 reuse count: 1 ---------- Rankings at 0x90000000 next: 0x90000000 prev: 0x90000001 entry: 0xa0010002 dirty: 0 ---------- Entry at 0xa0010003 hash: 0x4a70620e next entry: 0x0 rankings: 0x90000001 key length: 14 key: "the second key" key addr: 0x0 reuse count: 0 <---- list 0 ---------- Rankings at 0x90000001 next: 0x90000000 prev: 0x90000001 <----- head entry: 0xa0010003 dirty: 1 <----- This was actually inserted on list 1 ---------- Entry at 0xa0010004 hash: 0x63909ecb next entry: 0x0 rankings: 0x90000002 key length: 14 key: "some other key" key addr: 0x0 reuse count: 0 ---------- Rankings at 0x90000002 next: 0x90000002 prev: 0x90000002 entry: 0xa0010004 dirty: 0 ---------- ================================ Generated with: SetNewEviction(); SetMaxSize(20 * 1024 * 1024); InitCache(); const char* kName1 = "the first key"; const char* kName2 = "the second key"; disk_cache::Entry* entry; ASSERT_EQ(net::OK, CreateEntry(kName1, &entry)); entry->Close(); ASSERT_EQ(net::OK, CreateEntry(kName2, &entry)); entry->Close(); ASSERT_EQ(net::OK, CreateEntry("some other key", &entry)); entry->Close(); ASSERT_EQ(net::OK, OpenEntry(kName1, &entry)); entry->Close(); ASSERT_EQ(net::OK, OpenEntry(kName2, &entry)); Set a breakpoint on that last line, and when the entry is moved from one list to another, crash the process: rankings_->Remove(entry->rankings(), Rankings::NO_USE); rankings_->Insert(entry->rankings(), false, Rankings::LOW_USE); entry->entry()->Store(); <---- crash here