summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Evans <code@jeremyevans.net>2020-05-25 19:29:32 -0700
committerJeremy Evans <code@jeremyevans.net>2020-05-25 21:38:35 -0700
commit4e1f2283b432e833bd4e6f7724ba0496760e68e8 (patch)
tree3bfb8dfe70a7704b02ee6b61a965ef73cac8bf27
parentfaab5cbeb762adec4983d603d71e72add5108249 (diff)
Make Thread#thread_variable? similar to #thread_variable_get
Don't use rb_check_id, which only works for pinned symbols. Switch inadvertent creation test for thread_variable? to only check for pinned symbols, same as thread_variable_get and thread_variable_set. Make key variable name in thread_local_set match thread_local_get and thread_variable?. Fixes [Bug #16906]
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/3145
-rw-r--r--test/-ext-/symbol/test_inadvertent_creation.rb2
-rw-r--r--thread.c9
2 files changed, 4 insertions, 7 deletions
diff --git a/test/-ext-/symbol/test_inadvertent_creation.rb b/test/-ext-/symbol/test_inadvertent_creation.rb
index 40b3f59..b0508e9 100644
--- a/test/-ext-/symbol/test_inadvertent_creation.rb
+++ b/test/-ext-/symbol/test_inadvertent_creation.rb
@@ -255,7 +255,7 @@ module Test_Symbol
Thread.current.thread_variable_set(:test, nil)
name = noninterned_name
assert_not_send([Thread.current, :thread_variable?, name])
- assert_not_interned(name)
+ assert_not_pinneddown(name)
end
def test_enumerable_inject_op
diff --git a/thread.c b/thread.c
index 13fef6b..91a953b 100644
--- a/thread.c
+++ b/thread.c
@@ -3468,7 +3468,7 @@ rb_thread_variable_get(VALUE thread, VALUE key)
*/
static VALUE
-rb_thread_variable_set(VALUE thread, VALUE id, VALUE val)
+rb_thread_variable_set(VALUE thread, VALUE key, VALUE val)
{
VALUE locals;
@@ -3477,7 +3477,7 @@ rb_thread_variable_set(VALUE thread, VALUE id, VALUE val)
}
locals = rb_thread_local_storage(thread);
- return rb_hash_aset(locals, rb_to_symbol(id), val);
+ return rb_hash_aset(locals, rb_to_symbol(key), val);
}
/*
@@ -3667,16 +3667,13 @@ static VALUE
rb_thread_variable_p(VALUE thread, VALUE key)
{
VALUE locals;
- ID id = rb_check_id(&key);
-
- if (!id) return Qfalse;
if (LIKELY(!THREAD_LOCAL_STORAGE_INITIALISED_P(thread))) {
return Qfalse;
}
locals = rb_thread_local_storage(thread);
- if (rb_hash_lookup(locals, ID2SYM(id)) != Qnil) {
+ if (rb_hash_lookup(locals, rb_to_symbol(key)) != Qnil) {
return Qtrue;
}
else {