summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gc.c4
-rw-r--r--gc.h2
-rw-r--r--lib.c4
3 files changed, 6 insertions, 4 deletions
diff --git a/gc.c b/gc.c
index 41f0c6d2..088508d9 100644
--- a/gc.c
+++ b/gc.c
@@ -1321,13 +1321,13 @@ static struct cobj_ops prot_array_ops = cobj_ops_init(eq,
prot_array_mark,
cobj_eq_hash_op);
-val *gc_prot_array_alloc(cnum size)
+val *gc_prot_array_alloc(cnum size, val *obj)
{
struct prot_array *pa = coerce(struct prot_array *,
chk_calloc(offsetof(struct prot_array, arr) +
size * sizeof(val), 1));
pa->size = size;
- pa->self = cobj(coerce(mem_t *, pa), prot_array_cls, &prot_array_ops);
+ *obj = pa->self = cobj(coerce(mem_t *, pa), prot_array_cls, &prot_array_ops);
return pa->arr;
}
diff --git a/gc.h b/gc.h
index 464268bf..1b34b82c 100644
--- a/gc.h
+++ b/gc.h
@@ -88,5 +88,5 @@ INLINE void gc_stack_check(void)
gc_stack_overflow();
}
-val *gc_prot_array_alloc(cnum size);
+val *gc_prot_array_alloc(cnum size, val *obj);
void gc_prot_array_free(val *);
diff --git a/lib.c b/lib.c
index 422cb693..b5eb4d1e 100644
--- a/lib.c
+++ b/lib.c
@@ -11094,9 +11094,11 @@ static void mergesort(val vec, val lessfun, val keyfun, cnum from, cnum to,
static void ssort_vec(val vec, val lessfun, val keyfun, val self)
{
cnum len = c_fixnum(length(vec), self);
- val *aux = gc_prot_array_alloc(len);
+ val auxobj;
+ val *aux = gc_prot_array_alloc(len, &auxobj);
mergesort(vec, lessfun, keyfun, 0, len, aux);
gc_prot_array_free(aux);
+ gc_hint(auxobj);
}