| 2712 | } |
| 2713 | |
| 2714 | bool MemPool::validate(char* buf, FB_SIZE_T size) |
| 2715 | { |
| 2716 | StatInt vMap = 0, vUse = 0; |
| 2717 | |
| 2718 | smallObjects.validate(this, vMap, vUse); |
| 2719 | mediumObjects.validate(this, vMap, vUse); |
| 2720 | |
| 2721 | // validate big objects |
| 2722 | for (MemBigHunk* h = bigHunks; h; h = h->next) |
| 2723 | h->validate(this, vMap, vUse); |
| 2724 | |
| 2725 | // validate blocks redirected to parent |
| 2726 | for (FB_SIZE_T n = 0; n < parentRedirected.getCount(); ++n) |
| 2727 | { |
| 2728 | MemBlock* b = parentRedirected[n]; |
| 2729 | if (!b->isExtent()) |
| 2730 | vUse += parentRedirected[n]->getSize(); |
| 2731 | } |
| 2732 | |
| 2733 | if (vMap != mapped_memory.value() || vUse != used_memory.value()) |
| 2734 | { |
| 2735 | char buf[256]; |
| 2736 | fb_utils::snprintf(buf, sizeof(buf), "Memory statistics does not match pool: " |
| 2737 | "mapped=%" SQUADFORMAT "(%" SQUADFORMAT " st), used=%" SQUADFORMAT "(%" SQUADFORMAT " st)", |
| 2738 | SINT64(vMap), SINT64(mapped_memory.value()), SINT64(vUse), SINT64(used_memory.value())); |
| 2739 | return false; |
| 2740 | } |
| 2741 | |
| 2742 | return true; |
| 2743 | } |
| 2744 | |
| 2745 | #ifdef MEM_DEBUG |
| 2746 | void MemPool::print_contents(const char* filename, unsigned flags, const char* filter_path) noexcept |