Skip to content

Commit 356ca6c

Browse files
committed
Some fixes for global variables
1 parent c9c4734 commit 356ca6c

4 files changed

Lines changed: 29 additions & 8 deletions

File tree

depend

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13362,6 +13362,7 @@ re.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
1336213362
re.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
1336313363
re.$(OBJEXT): {$(VPATH)}config.h
1336413364
re.$(OBJEXT): {$(VPATH)}constant.h
13365+
re.$(OBJEXT): {$(VPATH)}debug_counter.h
1336513366
re.$(OBJEXT): {$(VPATH)}defines.h
1336613367
re.$(OBJEXT): {$(VPATH)}encindex.h
1336713368
re.$(OBJEXT): {$(VPATH)}encoding.h
@@ -13545,6 +13546,7 @@ re.$(OBJEXT): {$(VPATH)}util.h
1354513546
re.$(OBJEXT): {$(VPATH)}vm_core.h
1354613547
re.$(OBJEXT): {$(VPATH)}vm_debug.h
1354713548
re.$(OBJEXT): {$(VPATH)}vm_opts.h
13549+
re.$(OBJEXT): {$(VPATH)}vm_sync.h
1354813550
regcomp.$(OBJEXT): $(hdrdir)/ruby.h
1354913551
regcomp.$(OBJEXT): $(hdrdir)/ruby/ruby.h
1355013552
regcomp.$(OBJEXT): {$(VPATH)}assert.h

encoding.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -866,7 +866,11 @@ int
866866
rb_enc_find_index(const char *name)
867867
{
868868
int i;
869-
ASSERT_vm_unlocking(); // it needs to be unlocked so it can call `load_encoding` if necessary
869+
#if RUBY_DEBUG > 0
870+
if (rb_multi_ractor_p() || !rb_enc_registered(name)) {
871+
ASSERT_vm_unlocking(); // it needs to be unlocked so it can call `load_encoding` if necessary
872+
}
873+
#endif
870874
GLOBAL_ENC_TABLE_LOCKING(enc_table) {
871875
i = enc_registered(enc_table, name);
872876
}

re.c

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include "internal/object.h"
2525
#include "internal/ractor.h"
2626
#include "internal/variable.h"
27+
#include "vm_sync.h"
2728
#include "regint.h"
2829
#include "ruby/encoding.h"
2930
#include "ruby/re.h"
@@ -4588,14 +4589,22 @@ rb_reg_regsub(VALUE str, VALUE src, struct re_registers *regs, VALUE regexp)
45884589
static VALUE
45894590
ignorecase_getter(ID _x, VALUE *_y)
45904591
{
4591-
rb_category_warn(RB_WARN_CATEGORY_DEPRECATED, "variable $= is no longer effective");
4592+
RB_VM_UNLOCK();
4593+
{
4594+
rb_category_warn(RB_WARN_CATEGORY_DEPRECATED, "variable $= is no longer effective");
4595+
}
4596+
RB_VM_LOCK();
45924597
return Qfalse;
45934598
}
45944599

45954600
static void
45964601
ignorecase_setter(VALUE val, ID id, VALUE *_)
45974602
{
4598-
rb_category_warn(RB_WARN_CATEGORY_DEPRECATED, "variable $= is no longer effective; ignored");
4603+
RB_VM_UNLOCK();
4604+
{
4605+
rb_category_warn(RB_WARN_CATEGORY_DEPRECATED, "variable $= is no longer effective; ignored");
4606+
}
4607+
RB_VM_LOCK();
45994608
}
46004609

46014610
static VALUE

variable.c

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -986,17 +986,19 @@ rb_gvar_set_entry(struct rb_global_entry *entry, VALUE val)
986986
{
987987
struct trace_data trace;
988988
struct rb_global_variable *var = entry->var;
989-
RB_VM_UNLOCK();
990989

991990
(*var->setter)(val, entry->id, var->data);
992991

993992
if (var->trace && !var->block_trace) {
994993
var->block_trace = 1;
995994
trace.trace = var->trace;
996995
trace.val = val;
997-
rb_ensure(trace_ev, (VALUE)&trace, trace_en, (VALUE)var);
996+
RB_VM_UNLOCK();
997+
{
998+
rb_ensure(trace_ev, (VALUE)&trace, trace_en, (VALUE)var);
999+
}
1000+
RB_VM_LOCK();
9981001
}
999-
RB_VM_LOCK();
10001002
return val;
10011003
}
10021004

@@ -1050,9 +1052,13 @@ rb_gvar_get(ID id)
10501052
}
10511053
else {
10521054
retval = (*var->getter)(entry->id, var->data);
1053-
if (rb_obj_respond_to(retval, rb_intern("clone"), 1)) {
1054-
retval = rb_funcall(retval, rb_intern("clone"), 0);
1055+
RB_VM_UNLOCK();
1056+
{
1057+
if (rb_obj_respond_to(retval, rb_intern("clone"), 1)) {
1058+
retval = rb_funcall(retval, rb_intern("clone"), 0);
1059+
}
10551060
}
1061+
RB_VM_LOCK();
10561062
rb_hash_aset(gvars, key, retval);
10571063
}
10581064
}

0 commit comments

Comments
 (0)