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

Side by Side Diff: base/metrics/persistent_memory_allocator.cc

Issue 2578323002: Improved support for objects inside persistent memory. (Closed)
Patch Set: addressed review comments by asvitkine Created 3 years, 11 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
OLDNEW
1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2015 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 "base/metrics/persistent_memory_allocator.h" 5 #include "base/metrics/persistent_memory_allocator.h"
6 6
7 #include <assert.h> 7 #include <assert.h>
8 #include <algorithm> 8 #include <algorithm>
9 9
10 #if defined(OS_WIN) 10 #if defined(OS_WIN)
(...skipping 716 matching lines...) Expand 10 before | Expand all | Expand 10 after
727 // Dereference a block |ref| and ensure that it's valid for the desired 727 // Dereference a block |ref| and ensure that it's valid for the desired
728 // |type_id| and |size|. |special| indicates that we may try to access block 728 // |type_id| and |size|. |special| indicates that we may try to access block
729 // headers not available to callers but still accessed by this module. By 729 // headers not available to callers but still accessed by this module. By
730 // having internal dereferences go through this same function, the allocator 730 // having internal dereferences go through this same function, the allocator
731 // is hardened against corruption. 731 // is hardened against corruption.
732 const volatile PersistentMemoryAllocator::BlockHeader* 732 const volatile PersistentMemoryAllocator::BlockHeader*
733 PersistentMemoryAllocator::GetBlock(Reference ref, uint32_t type_id, 733 PersistentMemoryAllocator::GetBlock(Reference ref, uint32_t type_id,
734 uint32_t size, bool queue_ok, 734 uint32_t size, bool queue_ok,
735 bool free_ok) const { 735 bool free_ok) const {
736 // Validation of parameters. 736 // Validation of parameters.
737 if (ref < (queue_ok ? kReferenceQueue : sizeof(SharedMetadata)))
738 return nullptr;
737 if (ref % kAllocAlignment != 0) 739 if (ref % kAllocAlignment != 0)
738 return nullptr; 740 return nullptr;
739 if (ref < (queue_ok ? kReferenceQueue : sizeof(SharedMetadata)))
740 return nullptr;
741 size += sizeof(BlockHeader); 741 size += sizeof(BlockHeader);
742 if (ref + size > mem_size_) 742 if (ref + size > mem_size_)
743 return nullptr; 743 return nullptr;
744 744
745 // Validation of referenced block-header. 745 // Validation of referenced block-header.
746 if (!free_ok) { 746 if (!free_ok) {
747 uint32_t freeptr = std::min( 747 uint32_t freeptr = std::min(
748 shared_meta()->freeptr.load(std::memory_order_relaxed), mem_size_); 748 shared_meta()->freeptr.load(std::memory_order_relaxed), mem_size_);
749 if (ref + size > freeptr) 749 if (ref + size > freeptr)
750 return nullptr; 750 return nullptr;
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
907 907
908 // static 908 // static
909 bool FilePersistentMemoryAllocator::IsFileAcceptable( 909 bool FilePersistentMemoryAllocator::IsFileAcceptable(
910 const MemoryMappedFile& file, 910 const MemoryMappedFile& file,
911 bool read_only) { 911 bool read_only) {
912 return IsMemoryAcceptable(file.data(), file.length(), 0, read_only); 912 return IsMemoryAcceptable(file.data(), file.length(), 0, read_only);
913 } 913 }
914 #endif // !defined(OS_NACL) 914 #endif // !defined(OS_NACL)
915 915
916 } // namespace base 916 } // namespace base
OLDNEW
« no previous file with comments | « base/metrics/persistent_memory_allocator.h ('k') | base/metrics/persistent_memory_allocator_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698