ref: 0f0024116ec937f749ea6f146d1b9af648cf2ac0
parent: 47451dfe7e1fdecc6266f63e07ceeaa29040e114
author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
date: Thu Mar 20 03:24:17 EDT 2025
cvalues: less "are we exiting yet?" logic
--- a/src/cvalues.c
+++ b/src/cvalues.c
@@ -38,7 +38,6 @@
#define SWAP_sf(a, b) (tmp = a, a = b, b = tmp, 1)
if(l == 0)
return;
- bool exiting = slg.exiting;
do{
tmp = lst[n];
if(isforwarded((sl_v)tmp)){
@@ -49,7 +48,7 @@
sl_type *t = cv_class(tmp);
if(t->vtable != nil && t->vtable->finalize != nil)
t->vtable->finalize(tagptr(tmp, TAG_CVALUE));
- if(!isinlined(tmp) && owned(tmp) && !exiting)
+ if(!isinlined(tmp) && owned(tmp))
MEM_FREE(cv_data(tmp));
ndel++;
}
@@ -602,8 +601,8 @@
if(t->vtable != nil && t->vtable->relocate != nil)
t->vtable->relocate(v, ncv);
forward(v, ncv);
- if(slg.exiting)
- cv_autorelease(ptr(ncv));
+ if(slg.exiting && t->vtable != nil)
+ add_finalizer(ptr(ncv));
return ncv;
}