Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(155)

Side by Side Diff: net/disk_cache/entry_impl.cc

Issue 16837003: Disk cache: Update Addr to handle file format version 3. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/disk_cache/entry_impl.h" 5 #include "net/disk_cache/entry_impl.h"
6 6
7 #include "base/hash.h" 7 #include "base/hash.h"
8 #include "base/message_loop.h" 8 #include "base/message_loop.h"
9 #include "base/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 #include "base/strings/string_util.h" 10 #include "base/strings/string_util.h"
(...skipping 578 matching lines...) Expand 10 before | Expand all | Expand 10 after
589 STRESS_DCHECK(next_addr.value() != entry_.address().value()); 589 STRESS_DCHECK(next_addr.value() != entry_.address().value());
590 590
591 if (stored->state > ENTRY_DOOMED || stored->state < ENTRY_NORMAL) 591 if (stored->state > ENTRY_DOOMED || stored->state < ENTRY_NORMAL)
592 return false; 592 return false;
593 593
594 Addr key_addr(stored->long_key); 594 Addr key_addr(stored->long_key);
595 if ((stored->key_len <= kMaxInternalKeyLength && key_addr.is_initialized()) || 595 if ((stored->key_len <= kMaxInternalKeyLength && key_addr.is_initialized()) ||
596 (stored->key_len > kMaxInternalKeyLength && !key_addr.is_initialized())) 596 (stored->key_len > kMaxInternalKeyLength && !key_addr.is_initialized()))
597 return false; 597 return false;
598 598
599 if (!key_addr.SanityCheck()) 599 if (!key_addr.SanityCheckV2())
600 return false; 600 return false;
601 601
602 if (key_addr.is_initialized() && 602 if (key_addr.is_initialized() &&
603 ((stored->key_len < kMaxBlockSize && key_addr.is_separate_file()) || 603 ((stored->key_len < kMaxBlockSize && key_addr.is_separate_file()) ||
604 (stored->key_len >= kMaxBlockSize && key_addr.is_block_file()))) 604 (stored->key_len >= kMaxBlockSize && key_addr.is_block_file())))
605 return false; 605 return false;
606 606
607 int num_blocks = NumBlocksForEntry(stored->key_len); 607 int num_blocks = NumBlocksForEntry(stored->key_len);
608 if (entry_.address().num_blocks() != num_blocks) 608 if (entry_.address().num_blocks() != num_blocks)
609 return false; 609 return false;
(...skipping 12 matching lines...) Expand all
622 if (stored->hash != base::Hash(GetKey())) 622 if (stored->hash != base::Hash(GetKey()))
623 return false; 623 return false;
624 624
625 for (int i = 0; i < kNumStreams; i++) { 625 for (int i = 0; i < kNumStreams; i++) {
626 Addr data_addr(stored->data_addr[i]); 626 Addr data_addr(stored->data_addr[i]);
627 int data_size = stored->data_size[i]; 627 int data_size = stored->data_size[i];
628 if (data_size < 0) 628 if (data_size < 0)
629 return false; 629 return false;
630 if (!data_size && data_addr.is_initialized()) 630 if (!data_size && data_addr.is_initialized())
631 return false; 631 return false;
632 if (!data_addr.SanityCheck()) 632 if (!data_addr.SanityCheckV2())
633 return false; 633 return false;
634 if (!data_size) 634 if (!data_size)
635 continue; 635 continue;
636 if (data_size <= kMaxBlockSize && data_addr.is_separate_file()) 636 if (data_size <= kMaxBlockSize && data_addr.is_separate_file())
637 return false; 637 return false;
638 if (data_size > kMaxBlockSize && data_addr.is_block_file()) 638 if (data_size > kMaxBlockSize && data_addr.is_block_file())
639 return false; 639 return false;
640 } 640 }
641 return true; 641 return true;
642 } 642 }
643 643
644 void EntryImpl::FixForDelete() { 644 void EntryImpl::FixForDelete() {
645 EntryStore* stored = entry_.Data(); 645 EntryStore* stored = entry_.Data();
646 Addr key_addr(stored->long_key); 646 Addr key_addr(stored->long_key);
647 647
648 if (!key_addr.is_initialized()) 648 if (!key_addr.is_initialized())
649 stored->key[stored->key_len] = '\0'; 649 stored->key[stored->key_len] = '\0';
650 650
651 for (int i = 0; i < kNumStreams; i++) { 651 for (int i = 0; i < kNumStreams; i++) {
652 Addr data_addr(stored->data_addr[i]); 652 Addr data_addr(stored->data_addr[i]);
653 int data_size = stored->data_size[i]; 653 int data_size = stored->data_size[i];
654 if (data_addr.is_initialized()) { 654 if (data_addr.is_initialized()) {
655 if ((data_size <= kMaxBlockSize && data_addr.is_separate_file()) || 655 if ((data_size <= kMaxBlockSize && data_addr.is_separate_file()) ||
656 (data_size > kMaxBlockSize && data_addr.is_block_file()) || 656 (data_size > kMaxBlockSize && data_addr.is_block_file()) ||
657 !data_addr.SanityCheck()) { 657 !data_addr.SanityCheckV2()) {
658 STRESS_NOTREACHED(); 658 STRESS_NOTREACHED();
659 // The address is weird so don't attempt to delete it. 659 // The address is weird so don't attempt to delete it.
660 stored->data_addr[i] = 0; 660 stored->data_addr[i] = 0;
661 // In general, trust the stored size as it should be in sync with the 661 // In general, trust the stored size as it should be in sync with the
662 // total size tracked by the backend. 662 // total size tracked by the backend.
663 } 663 }
664 } 664 }
665 if (data_size < 0) 665 if (data_size < 0)
666 stored->data_size[i] = 0; 666 stored->data_size[i] = 0;
667 } 667 }
(...skipping 873 matching lines...) Expand 10 before | Expand all | Expand 10 after
1541 Trace("%s 0x%p 0x%x 0x%x", msg, reinterpret_cast<void*>(this), 1541 Trace("%s 0x%p 0x%x 0x%x", msg, reinterpret_cast<void*>(this),
1542 entry_.address().value(), node_.address().value()); 1542 entry_.address().value(), node_.address().value());
1543 1543
1544 Trace(" data: 0x%x 0x%x 0x%x", entry_.Data()->data_addr[0], 1544 Trace(" data: 0x%x 0x%x 0x%x", entry_.Data()->data_addr[0],
1545 entry_.Data()->data_addr[1], entry_.Data()->long_key); 1545 entry_.Data()->data_addr[1], entry_.Data()->long_key);
1546 1546
1547 Trace(" doomed: %d 0x%x", doomed_, dirty); 1547 Trace(" doomed: %d 0x%x", doomed_, dirty);
1548 } 1548 }
1549 1549
1550 } // namespace disk_cache 1550 } // namespace disk_cache
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698