mirror of
https://github.com/ruby/ruby.git
synced 2026-10-28 16:36:20 +08:00
This reverts commit 2998c8d6b9.
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:
1 parent
16c6f36039
commit
148fde2754
3 files changed
+7
-22
Notes:
git
2025-11-11 02:53:16 +00:00
Merged-By: luke-gru <luke.gru@gmail.com>
No files matched your search
@@ -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);
|
||||
|
||||
+6
-6
@@ -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
|
||||
Reference in new issue
Block a user