From da1e0f6313ffb1f180899e14a2ed8061332b8dd9 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Tue, 7 Oct 2008 13:12:44 +0000 Subject: [PATCH] fix code allocation bug svn: r11959 --- src/mzscheme/src/salloc.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/mzscheme/src/salloc.c b/src/mzscheme/src/salloc.c index 15c841809c..2b412ed343 100644 --- a/src/mzscheme/src/salloc.c +++ b/src/mzscheme/src/salloc.c @@ -704,8 +704,11 @@ static long free_list_find_bucket(long size) if (free_list[hi].size == size) return hi; - else + else { + if (free_list[lo].size < size) + abort(); return lo; + } } void *scheme_malloc_code(long size) @@ -722,7 +725,13 @@ void *scheme_malloc_code(long size) page_size = get_page_size(); - if ((2 * size + CODE_HEADER_SIZE) > page_size) { + if (!free_list) { + free_list = (struct free_list_entry *)malloc_page(page_size); + scheme_code_page_total += page_size; + init_free_list(); + } + + if (size > free_list[0].size) { /* allocate large object on its own page(s) */ sz = size + CODE_HEADER_SIZE; sz = (sz + page_size - 1) & ~(page_size - 1); @@ -734,12 +743,6 @@ void *scheme_malloc_code(long size) return ((char *)pg) + CODE_HEADER_SIZE; } - if (!free_list) { - free_list = (struct free_list_entry *)malloc_page(page_size); - scheme_code_page_total += page_size; - init_free_list(); - } - bucket = free_list_find_bucket(size); size2 = free_list[bucket].size;