|  | 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 |