fix code allocation bug
svn: r11959
This commit is contained in:
parent
06efa91709
commit
da1e0f6313
|
@ -704,8 +704,11 @@ static long free_list_find_bucket(long size)
|
||||||
|
|
||||||
if (free_list[hi].size == size)
|
if (free_list[hi].size == size)
|
||||||
return hi;
|
return hi;
|
||||||
else
|
else {
|
||||||
|
if (free_list[lo].size < size)
|
||||||
|
abort();
|
||||||
return lo;
|
return lo;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void *scheme_malloc_code(long size)
|
void *scheme_malloc_code(long size)
|
||||||
|
@ -722,7 +725,13 @@ void *scheme_malloc_code(long size)
|
||||||
|
|
||||||
page_size = get_page_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) */
|
/* allocate large object on its own page(s) */
|
||||||
sz = size + CODE_HEADER_SIZE;
|
sz = size + CODE_HEADER_SIZE;
|
||||||
sz = (sz + page_size - 1) & ~(page_size - 1);
|
sz = (sz + page_size - 1) & ~(page_size - 1);
|
||||||
|
@ -734,12 +743,6 @@ void *scheme_malloc_code(long size)
|
||||||
return ((char *)pg) + CODE_HEADER_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);
|
bucket = free_list_find_bucket(size);
|
||||||
size2 = free_list[bucket].size;
|
size2 = free_list[bucket].size;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user