Skip to content

Commit 93fc392

Browse files
committed
Make bigdecimal Ractor safe
1 parent fb2c7b0 commit 93fc392

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

ext/bigdecimal/bigdecimal.c

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,11 +189,16 @@ BigDecimal_memsize(const void *ptr)
189189
return (sizeof(*pv) + pv->MaxPrec * sizeof(BDIGIT));
190190
}
191191

192+
#ifndef HAVE_RB_EXT_RACTOR_SAFE
193+
# undef RUBY_TYPED_FROZEN_SHAREABLE
194+
# define RUBY_TYPED_FROZEN_SHAREABLE 0
195+
#endif
196+
192197
static const rb_data_type_t BigDecimal_data_type = {
193198
"BigDecimal",
194199
{ 0, BigDecimal_delete, BigDecimal_memsize, },
195200
#ifdef RUBY_TYPED_FREE_IMMEDIATELY
196-
0, 0, RUBY_TYPED_FREE_IMMEDIATELY
201+
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_FROZEN_SHAREABLE
197202
#endif
198203
};
199204

@@ -3351,6 +3356,9 @@ BigMath_s_log(VALUE klass, VALUE x, VALUE vprec)
33513356
void
33523357
Init_bigdecimal(void)
33533358
{
3359+
#ifdef HAVE_RB_EXT_RACTOR_SAFE
3360+
rb_ext_ractor_safe(true);
3361+
#endif
33543362
VALUE arg;
33553363

33563364
id_BigDecimal_exception_mode = rb_intern_const("BigDecimal.exception_mode");
@@ -3617,6 +3625,9 @@ static void VpFormatSt(char *psz, size_t fFmt);
36173625
static int VpRdup(Real *m, size_t ind_m);
36183626

36193627
#ifdef BIGDECIMAL_DEBUG
3628+
# ifdef HAVE_RB_EXT_RACTOR_SAFE
3629+
# error Need to make rewiting gnAlloc atomic
3630+
# endif
36203631
static int gnAlloc = 0; /* Memory allocation counter */
36213632
#endif /* BIGDECIMAL_DEBUG */
36223633

0 commit comments

Comments
 (0)