fixing subtle bug where heapsize was set wrong at some points
This commit is contained in:
parent
8ea6157c15
commit
561e0b07e1
|
@ -529,7 +529,10 @@ void gc(int mustgrow)
|
||||||
fl_readstate_t *rs;
|
fl_readstate_t *rs;
|
||||||
|
|
||||||
curheap = tospace;
|
curheap = tospace;
|
||||||
lim = curheap+heapsize-sizeof(cons_t);
|
if (grew)
|
||||||
|
lim = curheap+heapsize*2-sizeof(cons_t);
|
||||||
|
else
|
||||||
|
lim = curheap+heapsize-sizeof(cons_t);
|
||||||
|
|
||||||
if (fl_throwing_frame > curr_frame) {
|
if (fl_throwing_frame > curr_frame) {
|
||||||
top = fl_throwing_frame - 4;
|
top = fl_throwing_frame - 4;
|
||||||
|
@ -584,14 +587,12 @@ void gc(int mustgrow)
|
||||||
// more space to fill next time. if we grew tospace last time,
|
// more space to fill next time. if we grew tospace last time,
|
||||||
// grow the other half of the heap this time to catch up.
|
// grow the other half of the heap this time to catch up.
|
||||||
if (grew || ((lim-curheap) < (int)(heapsize/5)) || mustgrow) {
|
if (grew || ((lim-curheap) < (int)(heapsize/5)) || mustgrow) {
|
||||||
temp = LLT_REALLOC(tospace, grew ? heapsize : heapsize*2);
|
temp = LLT_REALLOC(tospace, heapsize*2);
|
||||||
if (temp == NULL)
|
if (temp == NULL)
|
||||||
fl_raise(memory_exception_value);
|
fl_raise(memory_exception_value);
|
||||||
tospace = temp;
|
tospace = temp;
|
||||||
if (!grew) {
|
if (grew) {
|
||||||
heapsize*=2;
|
heapsize*=2;
|
||||||
}
|
|
||||||
else {
|
|
||||||
temp = bitvector_resize(consflags, heapsize/sizeof(cons_t), 1);
|
temp = bitvector_resize(consflags, heapsize/sizeof(cons_t), 1);
|
||||||
if (temp == NULL)
|
if (temp == NULL)
|
||||||
fl_raise(memory_exception_value);
|
fl_raise(memory_exception_value);
|
||||||
|
|
Loading…
Reference in New Issue