Avoid referencing memory we've already freed.
authorRobert Haas <rhaas@postgresql.org>
Tue, 29 Apr 2014 18:08:46 +0000 (18:08 +0000)
committerRobert Haas <rhaas@postgresql.org>
Tue, 29 Apr 2014 18:08:46 +0000 (18:08 +0000)
src/backend/utils/mmgr/sb_alloc.c

index 7082047d2074deefd7884aa7d931250306f0d795..1fdcef3575efce4e751c4ad528224f4767d7db4a 100644 (file)
@@ -340,8 +340,10 @@ sb_free(void *ptr)
        {
                sb_heap *heap = relptr_access(base, span->parent);
                Size    first_page;
+               uint16  size_class;
 
                sb_unlink_span(base, heap, span);
+               size_class = span->size_class;
                first_page = fpm_pointer_to_page(fpm_base,
                                                                                 relptr_access(base, span->start));
                FreePageManagerPut(region->fpm, first_page, span->npages);
@@ -352,7 +354,7 @@ sb_free(void *ptr)
                 * frees the descriptor also.  If this is a superblock of any other
                 * type, we need to separately free the span object also.
                 */
-               if (span->size_class != SB_SCLASS_SPAN_OF_SPANS)
+               if (size_class != SB_SCLASS_SPAN_OF_SPANS)
                        sb_free(span);
        }