From 7f1813cd93cda8352b9c1ca7397c86748f8b2e11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Kochma=C5=84ski?= Date: Mon, 19 Oct 2020 16:52:43 +0200 Subject: [PATCH] ecl_alloc_weak_pointer: don't register immediate objects as disappearing We have special-cased all immediate objects except ECL_T. Creating such link leads to a segmentation fault when GC tries to dereference the pointer. Fixes #610. --- src/c/alloc_2.d | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/c/alloc_2.d b/src/c/alloc_2.d index c8f3ba61..093072de 100644 --- a/src/c/alloc_2.d +++ b/src/c/alloc_2.d @@ -1448,7 +1448,7 @@ ecl_alloc_weak_pointer(cl_object o) ecl_enable_interrupts_env(the_env); obj->t = t_weak_pointer; obj->value = o; - if (!ECL_FIXNUMP(o) && !ECL_CHARACTERP(o) && !Null(o)) { + if (!ECL_IMMEDIATE(o)) { GC_GENERAL_REGISTER_DISAPPEARING_LINK((void**)&(obj->value), (void*)o); si_set_finalizer((cl_object)obj, ECL_T); }