Bug #20271
closedIssue with moving embedded string across ractors
Description
Updated by luke-gru (Luke Gruber) over 2 years ago
Updated by luke-gru (Luke Gruber) over 2 years ago
- Description updated (diff)
Updated by hsbt (Hiroshi SHIBATA) almost 2 years ago
- Status changed from Open to Assigned
- Assignee set to ko1 (Koichi Sasada)
Updated by byroot (Jean Boussier) over 1 year ago
- Status changed from Assigned to Closed
Applied in changeset git|0350290262ea0fbc4e1807901797ee8a6970c2b9.
Ractor: Fix moving embedded objects
[Bug #20271]
[Bug #20267]
[Bug #20255]
rb_obj_alloc(RBASIC_CLASS(obj)) will always allocate from the basic
40B pool, so if obj is larger than 40B, we'll create a corrupted
object when we later copy the shape_id.
Instead we can use the same logic than ractor copy, which is
to use rb_obj_clone, and later ask the GC to free the original
object.
We then must turn it into a T_OBJECT, because otherwise
just changing its class to RactorMoved leaves a lot of
ways to keep using the object, e.g.:
If it turns out that rb_obj_clone isn't performant enough
for some uses, we can always have carefully crafted specialized
paths for the types that would benefit from it.
Updated by byroot (Jean Boussier) over 1 year ago
- Related to Bug #20165: Ractors moving a Struct breaks beyond the first 3 fields added