Home | History | Annotate | Download | only in bad_rankings3
      1 Index file:
      2 version: 2.1
      3 entries: 3
      4 current id: 1
      5 last crash: 1
      6 head 0: 0x90000002
      7 tail 0: 0x90000002
      8 size 0: 0x1
      9 head 1: 0x90000001             <----
     10 tail 1: 0x90000000
     11 size 1: 0x2
     12 transaction: 0x0
     13 -------------------------
     14 
     15 Entry at 0xa0010002
     16 hash: 0x687d1422
     17 next entry: 0x0
     18 rankings: 0x90000000
     19 key length: 13
     20 key: "the first key"
     21 key addr: 0x0
     22 reuse count: 1
     23 ----------
     24 
     25 Rankings at 0x90000000
     26 next: 0x90000000
     27 prev: 0x90000001
     28 entry: 0xa0010002
     29 dirty: 0
     30 ----------
     31 
     32 Entry at 0xa0010003
     33 hash: 0x4a70620e
     34 next entry: 0x0
     35 rankings: 0x90000001
     36 key length: 14
     37 key: "the second key"
     38 key addr: 0x0
     39 reuse count: 0                 <---- list 0
     40 ----------
     41 
     42 Rankings at 0x90000001
     43 next: 0x90000000
     44 prev: 0x90000001               <----- head
     45 entry: 0xa0010003
     46 dirty: 1                       <----- This was actually inserted on list 1
     47 ----------
     48 
     49 Entry at 0xa0010004
     50 hash: 0x63909ecb
     51 next entry: 0x0
     52 rankings: 0x90000002
     53 key length: 14
     54 key: "some other key"
     55 key addr: 0x0
     56 reuse count: 0
     57 ----------
     58 
     59 Rankings at 0x90000002
     60 next: 0x90000002
     61 prev: 0x90000002
     62 entry: 0xa0010004
     63 dirty: 0
     64 ----------
     65 
     66 ================================
     67 
     68 Generated with:
     69 
     70   SetNewEviction();
     71   SetMaxSize(20 * 1024 * 1024);
     72   InitCache();
     73   const char* kName1 = "the first key";
     74   const char* kName2 = "the second key";
     75   disk_cache::Entry* entry;
     76   ASSERT_EQ(net::OK, CreateEntry(kName1, &entry));
     77   entry->Close();
     78   ASSERT_EQ(net::OK, CreateEntry(kName2, &entry));
     79   entry->Close();
     80   ASSERT_EQ(net::OK, CreateEntry("some other key", &entry));
     81   entry->Close();
     82 
     83   ASSERT_EQ(net::OK, OpenEntry(kName1, &entry));
     84   entry->Close();
     85 
     86   ASSERT_EQ(net::OK, OpenEntry(kName2, &entry));
     87 
     88 Set a breakpoint on that last line, and when the entry is moved from one list to another, crash the process:
     89 
     90   rankings_->Remove(entry->rankings(), Rankings::NO_USE);
     91   rankings_->Insert(entry->rankings(), false, Rankings::LOW_USE);
     92   entry->entry()->Store();                                           <---- crash here
     93