MCPcopy Create free account
hub / github.com/OpenDDS/OpenDDS / validate_pool

Method validate_pool

tests/unit-tests/dds/DCPS/MemoryPool.cpp:965–1107  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

963 }
964
965 void validate_pool(MemoryPool& pool, size_t expected_allocated_bytes,
966 bool log = false) {
967 AllocHeader* prev = 0;
968 size_t allocated_bytes = 0;
969 size_t free_bytes = 0;
970 size_t oh_bytes = 0;
971 size_t free_count = 0;
972 unsigned char* pool_end = pool.pool_ptr_ + pool.pool_size_;
973 bool prev_was_free = false;
974 size_t index = 0;
975
976 typedef std::map<FreeHeader*, int> FreeMap;
977 FreeMap free_map;
978 // Gather all free indices
979 AllocHeader* alloc = reinterpret_cast<AllocHeader*>(pool.pool_ptr_);
980 while (pool.includes(alloc)) {
981 FreeHeader* free_header = alloc->is_free() ?
982 reinterpret_cast<FreeHeader*>(alloc) : NULL;
983 if (free_header) {
984 free_map[free_header] = static_cast<int>(index);
985 }
986 alloc = alloc->next_adjacent();
987 ++index;
988 }
989
990 index = 0;
991 if (log) {
992 printf("Pool ptr %zx end %zx\n", (size_t)pool.pool_ptr_,
993 (size_t)pool_end);
994 }
995
996 // Check all allocs in positional order and not overlapping
997 alloc = reinterpret_cast<AllocHeader*>(pool.pool_ptr_);
998 while (pool.includes(alloc)) {
999 if (log) {
1000
1001 String smaller = "[ ]";
1002 String larger = "[ ]";
1003
1004 FreeHeader* free_header = alloc->is_free() ?
1005 reinterpret_cast<FreeHeader*>(alloc) : NULL;
1006 if (free_header) {
1007 FreeMap::const_iterator found;
1008 found = free_map.find(free_header->smaller_free(pool.pool_ptr_));
1009 if (found != free_map.end()) {
1010 smaller = "[" + to_dds_string(found->second) + "]";
1011 }
1012 found = free_map.find(free_header->larger_free(pool.pool_ptr_));
1013 if (found != free_map.end()) {
1014 larger = "[" + to_dds_string(found->second) + "]";
1015 }
1016 }
1017 printf(
1018 "Alloc[%zu] %s at %zx ptr %zx lg %s sm %s size %d psize %d\n",
1019 index++,
1020 alloc->is_free() ?
1021 (alloc == pool.largest_free_ ? "FREE!" : "free ") : " ",
1022 (size_t)alloc,

Callers

nothing calls this directly

Calls 9

next_adjacentMethod · 0.80
smaller_freeMethod · 0.80
larger_freeMethod · 0.80
prev_adjacentMethod · 0.80
to_dds_stringFunction · 0.50
findMethod · 0.45
endMethod · 0.45
ptrMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected