From 4713b084da2e03451e3478ad63b148545db3f1a9 Mon Sep 17 00:00:00 2001 From: Jean byroot Boussier Date: Tue, 7 Feb 2023 15:44:16 +0100 Subject: Revert "Revert "Consider DATA objects without a mark function as protected"" This reverts commit 6eae8e5f514db716e52ad06a2ac97e2cc3910d83. --- gc.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'gc.c') diff --git a/gc.c b/gc.c index 3baed251f4..cf87a74bdb 100644 --- a/gc.c +++ b/gc.c @@ -3110,7 +3110,7 @@ rb_data_object_wrap(VALUE klass, void *datap, RUBY_DATA_FUNC dmark, RUBY_DATA_FU { RUBY_ASSERT_ALWAYS(dfree != (RUBY_DATA_FUNC)1); if (klass) rb_data_object_check(klass); - return newobj_of(klass, T_DATA, (VALUE)dmark, (VALUE)dfree, (VALUE)datap, FALSE, sizeof(struct RTypedData)); + return newobj_of(klass, T_DATA, (VALUE)dmark, (VALUE)dfree, (VALUE)datap, !dmark, sizeof(struct RTypedData)); } VALUE @@ -3126,7 +3126,8 @@ rb_data_typed_object_wrap(VALUE klass, void *datap, const rb_data_type_t *type) { RBIMPL_NONNULL_ARG(type); if (klass) rb_data_object_check(klass); - return newobj_of(klass, T_DATA, (VALUE)type, (VALUE)1, (VALUE)datap, type->flags & RUBY_FL_WB_PROTECTED, sizeof(struct RTypedData)); + bool wb_protected = (type->flags & RUBY_FL_WB_PROTECTED) || !type->function.dmark; + return newobj_of(klass, T_DATA, (VALUE)type, (VALUE)1, (VALUE)datap, wb_protected, sizeof(struct RTypedData)); } VALUE -- cgit v1.2.3