Skip to content

Commit 148fde2

Browse files
authored
Revert "ns_subclasses refcount accesses need to be atomic (#15083)" (#15138)
This reverts commit 2998c8d. 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.
1 parent 16c6f36 commit 148fde2

File tree

3 files changed

+7
-22
lines changed

3 files changed

+7
-22
lines changed

class.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -671,7 +671,7 @@ rb_class_classext_free_subclasses(rb_classext_t *ext, VALUE klass, bool replacin
671671
}
672672
VM_ASSERT(
673673
rb_box_subclasses_ref_count(anchor->box_subclasses) > 0,
674-
"box_subclasses refcount (%p) %d", anchor->box_subclasses, rb_box_subclasses_ref_count(anchor->box_subclasses));
674+
"box_subclasses refcount (%lp) %d", anchor->box_subclasses, rb_box_subclasses_ref_count(anchor->box_subclasses));
675675
st_delete(tbl, &box_id, NULL);
676676
rb_box_subclasses_ref_dec(anchor->box_subclasses);
677677
xfree(anchor);

internal/class.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,29 +28,29 @@
2828
#endif
2929

3030
struct rb_box_subclasses {
31-
rb_atomic_t refcount;
31+
long refcount;
3232
struct st_table *tbl;
3333
};
3434
typedef struct rb_box_subclasses rb_box_subclasses_t;
3535

36-
static inline rb_atomic_t
36+
static inline long
3737
rb_box_subclasses_ref_count(rb_box_subclasses_t *box_sub)
3838
{
39-
return ATOMIC_LOAD_RELAXED(box_sub->refcount);
39+
return box_sub->refcount;
4040
}
4141

4242
static inline rb_box_subclasses_t *
4343
rb_box_subclasses_ref_inc(rb_box_subclasses_t *box_sub)
4444
{
45-
RUBY_ATOMIC_FETCH_ADD(box_sub->refcount, 1);
45+
box_sub->refcount++;
4646
return box_sub;
4747
}
4848

4949
static inline void
5050
rb_box_subclasses_ref_dec(rb_box_subclasses_t *box_sub)
5151
{
52-
rb_atomic_t was = RUBY_ATOMIC_FETCH_SUB(box_sub->refcount, 1);
53-
if (was == 1) {
52+
box_sub->refcount--;
53+
if (box_sub->refcount == 0) {
5454
st_free_table(box_sub->tbl);
5555
xfree(box_sub);
5656
}

test/ruby/test_class.rb

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -887,19 +887,4 @@ def test_method_table_assignment_just_after_class_init
887887
class C; end
888888
end;
889889
end
890-
891-
def test_subclasses_refcount_in_ractors
892-
assert_ractor "#{<<~"begin;"}\n#{<<~'end;'}"
893-
begin;
894-
rs = []
895-
8.times do
896-
rs << Ractor.new do
897-
5_000.times do
898-
Class.new
899-
end
900-
end
901-
end
902-
rs.each(&:join)
903-
end;
904-
end
905890
end

0 commit comments

Comments
 (0)