diff options
author | Peter Zhu <[email protected]> | 2022-01-14 13:59:38 -0500 |
---|---|---|
committer | Peter Zhu <[email protected]> | 2022-01-14 14:36:33 -0500 |
commit | 6b7eff90860d4fb4db01ec4d1f522afa6d809632 (patch) | |
tree | c545242eaf1dfeb27a1ec59d0cb181429584af88 /gc.c | |
parent | ca3d405242c722c8140944bda7278c2a9e5a7139 (diff) |
Separately allocate class_serial on 32-bit systems
On 32-bit systems, VWA causes class_serial to not be aligned (it only
guarantees 4 byte alignment but class_serial is 8 bytes and requires 8
byte alignment). This commit uses a hack to allocate class_serial
through malloc. Once VWA allocates with 8 byte alignment in the future,
we will revert this commit.
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/5442
Diffstat (limited to 'gc.c')
-rw-r--r-- | gc.c | 4 |
1 files changed, 4 insertions, 0 deletions
@@ -3132,6 +3132,10 @@ obj_free(rb_objspace_t *objspace, VALUE obj) rb_class_remove_subclass_head(obj); rb_class_remove_from_module_subclasses(obj); rb_class_remove_from_super_subclasses(obj); +#if SIZEOF_SERIAL_T != SIZEOF_VALUE && USE_RVARGC + xfree(RCLASS(obj)->class_serial_ptr); +#endif + #if !USE_RVARGC if (RCLASS_EXT(obj)) xfree(RCLASS_EXT(obj)); |