Skip to content

Commit f44dd80

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

File tree

5 files changed

+53
-8
lines changed

5 files changed

+53
-8
lines changed

depend

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4199,7 +4199,9 @@ encoding.$(OBJEXT): $(top_srcdir)/internal/gc.h
41994199
encoding.$(OBJEXT): $(top_srcdir)/internal/imemo.h
42004200
encoding.$(OBJEXT): $(top_srcdir)/internal/inits.h
42014201
encoding.$(OBJEXT): $(top_srcdir)/internal/load.h
4202+
encoding.$(OBJEXT): $(top_srcdir)/internal/namespace.h
42024203
encoding.$(OBJEXT): $(top_srcdir)/internal/object.h
4204+
encoding.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
42034205
encoding.$(OBJEXT): $(top_srcdir)/internal/serial.h
42044206
encoding.$(OBJEXT): $(top_srcdir)/internal/set_table.h
42054207
encoding.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
@@ -13362,6 +13364,7 @@ re.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
1336213364
re.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
1336313365
re.$(OBJEXT): {$(VPATH)}config.h
1336413366
re.$(OBJEXT): {$(VPATH)}constant.h
13367+
re.$(OBJEXT): {$(VPATH)}debug_counter.h
1336513368
re.$(OBJEXT): {$(VPATH)}defines.h
1336613369
re.$(OBJEXT): {$(VPATH)}encindex.h
1336713370
re.$(OBJEXT): {$(VPATH)}encoding.h
@@ -13545,6 +13548,7 @@ re.$(OBJEXT): {$(VPATH)}util.h
1354513548
re.$(OBJEXT): {$(VPATH)}vm_core.h
1354613549
re.$(OBJEXT): {$(VPATH)}vm_debug.h
1354713550
re.$(OBJEXT): {$(VPATH)}vm_opts.h
13551+
re.$(OBJEXT): {$(VPATH)}vm_sync.h
1354813552
regcomp.$(OBJEXT): $(hdrdir)/ruby.h
1354913553
regcomp.$(OBJEXT): $(hdrdir)/ruby/ruby.h
1355013554
regcomp.$(OBJEXT): {$(VPATH)}assert.h
@@ -17722,21 +17726,32 @@ time.$(OBJEXT): {$(VPATH)}timev.rbinc
1772217726
time.$(OBJEXT): {$(VPATH)}util.h
1772317727
time.$(OBJEXT): {$(VPATH)}vm_core.h
1772417728
time.$(OBJEXT): {$(VPATH)}vm_opts.h
17729+
transcode.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
17730+
transcode.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
17731+
transcode.$(OBJEXT): $(CCAN_DIR)/list/list.h
17732+
transcode.$(OBJEXT): $(CCAN_DIR)/str/str.h
1772517733
transcode.$(OBJEXT): $(hdrdir)/ruby/ruby.h
1772617734
transcode.$(OBJEXT): $(top_srcdir)/internal/array.h
17735+
transcode.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
1772717736
transcode.$(OBJEXT): $(top_srcdir)/internal/class.h
1772817737
transcode.$(OBJEXT): $(top_srcdir)/internal/compilers.h
1772917738
transcode.$(OBJEXT): $(top_srcdir)/internal/encoding.h
1773017739
transcode.$(OBJEXT): $(top_srcdir)/internal/gc.h
17740+
transcode.$(OBJEXT): $(top_srcdir)/internal/imemo.h
1773117741
transcode.$(OBJEXT): $(top_srcdir)/internal/inits.h
17742+
transcode.$(OBJEXT): $(top_srcdir)/internal/namespace.h
1773217743
transcode.$(OBJEXT): $(top_srcdir)/internal/object.h
17744+
transcode.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
1773317745
transcode.$(OBJEXT): $(top_srcdir)/internal/serial.h
17746+
transcode.$(OBJEXT): $(top_srcdir)/internal/set_table.h
1773417747
transcode.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
1773517748
transcode.$(OBJEXT): $(top_srcdir)/internal/string.h
1773617749
transcode.$(OBJEXT): $(top_srcdir)/internal/transcode.h
1773717750
transcode.$(OBJEXT): $(top_srcdir)/internal/variable.h
17751+
transcode.$(OBJEXT): $(top_srcdir)/internal/vm.h
1773817752
transcode.$(OBJEXT): $(top_srcdir)/internal/warnings.h
1773917753
transcode.$(OBJEXT): {$(VPATH)}assert.h
17754+
transcode.$(OBJEXT): {$(VPATH)}atomic.h
1774017755
transcode.$(OBJEXT): {$(VPATH)}backward/2/assume.h
1774117756
transcode.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
1774217757
transcode.$(OBJEXT): {$(VPATH)}backward/2/bool.h
@@ -17905,15 +17920,24 @@ transcode.$(OBJEXT): {$(VPATH)}internal/value_type.h
1790517920
transcode.$(OBJEXT): {$(VPATH)}internal/variable.h
1790617921
transcode.$(OBJEXT): {$(VPATH)}internal/warning_push.h
1790717922
transcode.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
17923+
transcode.$(OBJEXT): {$(VPATH)}method.h
1790817924
transcode.$(OBJEXT): {$(VPATH)}missing.h
17925+
transcode.$(OBJEXT): {$(VPATH)}node.h
1790917926
transcode.$(OBJEXT): {$(VPATH)}onigmo.h
1791017927
transcode.$(OBJEXT): {$(VPATH)}oniguruma.h
17928+
transcode.$(OBJEXT): {$(VPATH)}ruby_assert.h
17929+
transcode.$(OBJEXT): {$(VPATH)}ruby_atomic.h
17930+
transcode.$(OBJEXT): {$(VPATH)}rubyparser.h
1791117931
transcode.$(OBJEXT): {$(VPATH)}shape.h
1791217932
transcode.$(OBJEXT): {$(VPATH)}st.h
1791317933
transcode.$(OBJEXT): {$(VPATH)}subst.h
17934+
transcode.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
17935+
transcode.$(OBJEXT): {$(VPATH)}thread_native.h
1791417936
transcode.$(OBJEXT): {$(VPATH)}transcode.c
1791517937
transcode.$(OBJEXT): {$(VPATH)}transcode_data.h
17938+
transcode.$(OBJEXT): {$(VPATH)}vm_core.h
1791617939
transcode.$(OBJEXT): {$(VPATH)}vm_debug.h
17940+
transcode.$(OBJEXT): {$(VPATH)}vm_opts.h
1791717941
transcode.$(OBJEXT): {$(VPATH)}vm_sync.h
1791817942
util.$(OBJEXT): $(hdrdir)/ruby/ruby.h
1791917943
util.$(OBJEXT): $(top_srcdir)/internal/array.h

encoding.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include "ruby/encoding.h"
2929
#include "ruby/util.h"
3030
#include "ruby_assert.h"
31+
#include "vm_core.h"
3132
#include "vm_sync.h"
3233
#include "ruby_atomic.h"
3334

@@ -866,7 +867,11 @@ int
866867
rb_enc_find_index(const char *name)
867868
{
868869
int i;
869-
ASSERT_vm_unlocking(); // it needs to be unlocked so it can call `load_encoding` if necessary
870+
#if RUBY_DEBUG > 0
871+
if (rb_multi_ractor_p() || !rb_enc_registered(name)) {
872+
ASSERT_vm_unlocking(); // it needs to be unlocked so it can call `load_encoding` if necessary
873+
}
874+
#endif
870875
GLOBAL_ENC_TABLE_LOCKING(enc_table) {
871876
i = enc_registered(enc_table, name);
872877
}

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

transcode.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include "internal/transcode.h"
2222
#include "internal/encoding.h"
2323
#include "ruby/encoding.h"
24+
#include "vm_core.h"
2425
#include "vm_sync.h"
2526

2627
#include "transcode_data.h"

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)