From b6dd4a79bbc7ef854c84b56554041d035ce6c84e Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Fri, 11 Apr 2014 14:35:32 +0000 Subject: [PATCH] Fix bugs. --- src/backend/utils/mmgr/freepage.c | 2 +- src/backend/utils/mmgr/sb_alloc.c | 8 +++++--- src/backend/utils/mmgr/sb_region.c | 1 + 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/backend/utils/mmgr/freepage.c b/src/backend/utils/mmgr/freepage.c index 39cd498671..a572fefb8c 100644 --- a/src/backend/utils/mmgr/freepage.c +++ b/src/backend/utils/mmgr/freepage.c @@ -311,8 +311,8 @@ FreePageManagerPut(FreePageManager *fpm, Size first_page, Size npages) if (region != NULL && region->seg == NULL) { - sb_report_contiguous_freespace(region, contiguous_pages); fpm->largest_reported_chunk = contiguous_pages; + sb_report_contiguous_freespace(region, contiguous_pages); } else { diff --git a/src/backend/utils/mmgr/sb_alloc.c b/src/backend/utils/mmgr/sb_alloc.c index a2fd3ccc57..38b92762d4 100644 --- a/src/backend/utils/mmgr/sb_alloc.c +++ b/src/backend/utils/mmgr/sb_alloc.c @@ -294,10 +294,10 @@ sb_reset_allocator(sb_allocator *a) * Iterate through heaps back to front. We do it this way so that * spans-of-spans are freed last. */ - for (heapno = SB_NUM_SIZE_CLASSES; heapno >= 0; --heapno) + for (heapno = SB_NUM_SIZE_CLASSES - 1; heapno >= 0; --heapno) { sb_heap *heap = &a->heaps[heapno]; - Size fclass; + int fclass; for (fclass = 0; fclass < SB_FULLNESS_CLASSES; ++fclass) { @@ -309,15 +309,17 @@ sb_reset_allocator(sb_allocator *a) while (span != NULL) { Size offset; + sb_span *nextspan; superblock = relptr_access(base, span->start); + nextspan = relptr_access(base, span->nextspan); region = sb_lookup_region(superblock); Assert(region != NULL); offset = superblock - fpm_segment_base(region->fpm); Assert(offset % FPM_PAGE_SIZE == 0); FreePageManagerPut(region->fpm, offset / FPM_PAGE_SIZE, span->npages); - span = relptr_access(base, span->nextspan); + span = nextspan; } } } diff --git a/src/backend/utils/mmgr/sb_region.c b/src/backend/utils/mmgr/sb_region.c index 5d686c8d80..34cf910809 100644 --- a/src/backend/utils/mmgr/sb_region.c +++ b/src/backend/utils/mmgr/sb_region.c @@ -371,6 +371,7 @@ sb_private_region_for_allocator(Size npages) region->region_start = region_start; region->region_size = region_size; region->usable_pages = new_region_net_pages; + sb_private_pages_allocated += region->usable_pages; region->seg = NULL; region->allocator = NULL; region->fpm = (FreePageManager *) -- 2.39.5