mirror of
https://github.com/ruby/ruby.git
synced 2026-01-28 04:54:23 +00:00
This reverts commit 2998c8d6b99ec49925ebea42198b29c3e27b34a7. We need to find a better way to fix this bug. Even with this refcount change, errors were still being seen in CI. For now we need to remove this failing test.
This commit is contained in:
parent
16c6f36039
commit
148fde2754
Notes:
git
2025-11-11 02:53:16 +00:00
Merged-By: luke-gru <luke.gru@gmail.com>
2
class.c
2
class.c
@ -671,7 +671,7 @@ rb_class_classext_free_subclasses(rb_classext_t *ext, VALUE klass, bool replacin
|
||||
}
|
||||
VM_ASSERT(
|
||||
rb_box_subclasses_ref_count(anchor->box_subclasses) > 0,
|
||||
"box_subclasses refcount (%p) %d", anchor->box_subclasses, rb_box_subclasses_ref_count(anchor->box_subclasses));
|
||||
"box_subclasses refcount (%lp) %d", anchor->box_subclasses, rb_box_subclasses_ref_count(anchor->box_subclasses));
|
||||
st_delete(tbl, &box_id, NULL);
|
||||
rb_box_subclasses_ref_dec(anchor->box_subclasses);
|
||||
xfree(anchor);
|
||||
|
||||
@ -28,29 +28,29 @@
|
||||
#endif
|
||||
|
||||
struct rb_box_subclasses {
|
||||
rb_atomic_t refcount;
|
||||
long refcount;
|
||||
struct st_table *tbl;
|
||||
};
|
||||
typedef struct rb_box_subclasses rb_box_subclasses_t;
|
||||
|
||||
static inline rb_atomic_t
|
||||
static inline long
|
||||
rb_box_subclasses_ref_count(rb_box_subclasses_t *box_sub)
|
||||
{
|
||||
return ATOMIC_LOAD_RELAXED(box_sub->refcount);
|
||||
return box_sub->refcount;
|
||||
}
|
||||
|
||||
static inline rb_box_subclasses_t *
|
||||
rb_box_subclasses_ref_inc(rb_box_subclasses_t *box_sub)
|
||||
{
|
||||
RUBY_ATOMIC_FETCH_ADD(box_sub->refcount, 1);
|
||||
box_sub->refcount++;
|
||||
return box_sub;
|
||||
}
|
||||
|
||||
static inline void
|
||||
rb_box_subclasses_ref_dec(rb_box_subclasses_t *box_sub)
|
||||
{
|
||||
rb_atomic_t was = RUBY_ATOMIC_FETCH_SUB(box_sub->refcount, 1);
|
||||
if (was == 1) {
|
||||
box_sub->refcount--;
|
||||
if (box_sub->refcount == 0) {
|
||||
st_free_table(box_sub->tbl);
|
||||
xfree(box_sub);
|
||||
}
|
||||
|
||||
@ -887,19 +887,4 @@ CODE
|
||||
class C; end
|
||||
end;
|
||||
end
|
||||
|
||||
def test_subclasses_refcount_in_ractors
|
||||
assert_ractor "#{<<~"begin;"}\n#{<<~'end;'}"
|
||||
begin;
|
||||
rs = []
|
||||
8.times do
|
||||
rs << Ractor.new do
|
||||
5_000.times do
|
||||
Class.new
|
||||
end
|
||||
end
|
||||
end
|
||||
rs.each(&:join)
|
||||
end;
|
||||
end
|
||||
end
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user