summaryrefslogtreecommitdiff
path: root/gc.c
diff options
context:
space:
mode:
Diffstat (limited to 'gc.c')
-rw-r--r--gc.c29
1 files changed, 14 insertions, 15 deletions
diff --git a/gc.c b/gc.c
index 6d46337ef5..259b5cd673 100644
--- a/gc.c
+++ b/gc.c
@@ -548,32 +548,31 @@ assign_heap_slot(rb_objspace_t *objspace)
if (p == 0)
rb_memerror();
+ membase = p;
+ if ((VALUE)p % sizeof(RVALUE) != 0) {
+ p = (RVALUE*)((VALUE)p + sizeof(RVALUE) - ((VALUE)p % sizeof(RVALUE)));
+ if ((membase + HEAP_SIZE) < (p + HEAP_SIZE)) {
+ objs--;
+ }
+ }
+
+
lo = 0;
hi = heaps_used;
while (lo < hi) {
+ register RVALUE *mid_membase;
mid = (lo + hi) / 2;
- membase = heaps[mid].membase;
- if (membase < p) {
+ mid_membase = heaps[mid].membase;
+ if (mid_membase < membase) {
lo = mid + 1;
}
- else if (membase > p) {
+ else if (mid_membase > membase) {
hi = mid;
}
else {
- rb_bug("same heap slot is allocated: %p at %ld", p, mid);
- }
- }
-
- membase = p;
-
- if ((VALUE)p % sizeof(RVALUE) != 0) {
- p = (RVALUE*)((VALUE)p + sizeof(RVALUE) - ((VALUE)p % sizeof(RVALUE)));
- if ((membase + HEAP_SIZE) < (p + HEAP_SIZE)) {
- objs--;
+ rb_bug("same heap slot is allocated: %p at %ld", membase, mid);
}
}
-
-
if (hi < heaps_used) {
MEMMOVE(&heaps[hi+1], &heaps[hi], struct heaps_slot, heaps_used - hi);
}