thread.c: avoid inadvertent symbol creation
* thread.c (rb_thread_aref): avoid inadvertent symbol creation. (rb_thread_variable_get): ditto. (rb_thread_key_p): ditto. (rb_thread_variable_p): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@40096 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
f00035a4f7
commit
8074844065
@ -1,3 +1,10 @@
|
|||||||
|
Thu Apr 4 14:37:07 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* thread.c (rb_thread_aref): avoid inadvertent symbol creation.
|
||||||
|
(rb_thread_variable_get): ditto.
|
||||||
|
(rb_thread_key_p): ditto.
|
||||||
|
(rb_thread_variable_p): ditto.
|
||||||
|
|
||||||
Thu Apr 4 11:33:57 2013 NARUSE, Yui <naruse@ruby-lang.org>
|
Thu Apr 4 11:33:57 2013 NARUSE, Yui <naruse@ruby-lang.org>
|
||||||
|
|
||||||
* ext/openssl/ossl_bn.c (ossl_bn_to_i): Use bn2hex to speed up.
|
* ext/openssl/ossl_bn.c (ossl_bn_to_i): Use bn2hex to speed up.
|
||||||
|
@ -159,5 +159,33 @@ module Test_Symbol
|
|||||||
assert_equal(name, e.name)
|
assert_equal(name, e.name)
|
||||||
assert_equal([Feature5112], e.args)
|
assert_equal([Feature5112], e.args)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_thread_aref
|
||||||
|
Thread.current[:test] = nil
|
||||||
|
name = noninterned_name
|
||||||
|
assert_nil(Thread.current[name])
|
||||||
|
assert_not_send([Bug::Symbol, :interned?, name])
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_thread_key?
|
||||||
|
Thread.current[:test] = nil
|
||||||
|
name = noninterned_name
|
||||||
|
assert_not_send([Thread.current, :key?, name])
|
||||||
|
assert_not_send([Bug::Symbol, :interned?, name])
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_thread_variable_get
|
||||||
|
Thread.current.thread_variable_set(:test, nil)
|
||||||
|
name = noninterned_name
|
||||||
|
assert_nil(Thread.current.thread_variable_get(name))
|
||||||
|
assert_not_send([Bug::Symbol, :interned?, name])
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_thread_variable?
|
||||||
|
Thread.current.thread_variable_set(:test, nil)
|
||||||
|
name = noninterned_name
|
||||||
|
assert_not_send([Thread.current, :thread_variable?, name])
|
||||||
|
assert_not_send([Bug::Symbol, :interned?, name])
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
21
thread.c
21
thread.c
@ -2784,9 +2784,11 @@ rb_thread_local_aref(VALUE thread, ID id)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
rb_thread_aref(VALUE thread, VALUE id)
|
rb_thread_aref(VALUE thread, VALUE key)
|
||||||
{
|
{
|
||||||
return rb_thread_local_aref(thread, rb_to_id(id));
|
ID id = rb_check_id(&key);
|
||||||
|
if (!id) return Qnil;
|
||||||
|
return rb_thread_local_aref(thread, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
VALUE
|
VALUE
|
||||||
@ -2862,10 +2864,11 @@ rb_thread_aset(VALUE self, VALUE id, VALUE val)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
rb_thread_variable_get(VALUE thread, VALUE id)
|
rb_thread_variable_get(VALUE thread, VALUE key)
|
||||||
{
|
{
|
||||||
VALUE locals;
|
VALUE locals;
|
||||||
rb_thread_t *th;
|
rb_thread_t *th;
|
||||||
|
ID id = rb_check_id(&key);
|
||||||
|
|
||||||
GetThreadPtr(thread, th);
|
GetThreadPtr(thread, th);
|
||||||
|
|
||||||
@ -2873,8 +2876,9 @@ rb_thread_variable_get(VALUE thread, VALUE id)
|
|||||||
rb_raise(rb_eSecurityError, "Insecure: can't access thread locals");
|
rb_raise(rb_eSecurityError, "Insecure: can't access thread locals");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!id) return Qnil;
|
||||||
locals = rb_iv_get(thread, "locals");
|
locals = rb_iv_get(thread, "locals");
|
||||||
return rb_hash_aref(locals, ID2SYM(rb_to_id(id)));
|
return rb_hash_aref(locals, ID2SYM(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -2922,11 +2926,11 @@ static VALUE
|
|||||||
rb_thread_key_p(VALUE self, VALUE key)
|
rb_thread_key_p(VALUE self, VALUE key)
|
||||||
{
|
{
|
||||||
rb_thread_t *th;
|
rb_thread_t *th;
|
||||||
ID id = rb_to_id(key);
|
ID id = rb_check_id(&key);
|
||||||
|
|
||||||
GetThreadPtr(self, th);
|
GetThreadPtr(self, th);
|
||||||
|
|
||||||
if (!th->local_storage) {
|
if (!id || !th->local_storage) {
|
||||||
return Qfalse;
|
return Qfalse;
|
||||||
}
|
}
|
||||||
if (st_lookup(th->local_storage, id, 0)) {
|
if (st_lookup(th->local_storage, id, 0)) {
|
||||||
@ -3043,13 +3047,16 @@ static VALUE
|
|||||||
rb_thread_variable_p(VALUE thread, VALUE key)
|
rb_thread_variable_p(VALUE thread, VALUE key)
|
||||||
{
|
{
|
||||||
VALUE locals;
|
VALUE locals;
|
||||||
|
ID id = rb_check_id(&key);
|
||||||
|
|
||||||
|
if (!id) return Qfalse;
|
||||||
|
|
||||||
locals = rb_iv_get(thread, "locals");
|
locals = rb_iv_get(thread, "locals");
|
||||||
|
|
||||||
if (!RHASH(locals)->ntbl)
|
if (!RHASH(locals)->ntbl)
|
||||||
return Qfalse;
|
return Qfalse;
|
||||||
|
|
||||||
if (st_lookup(RHASH(locals)->ntbl, ID2SYM(rb_to_id(key)), 0)) {
|
if (st_lookup(RHASH(locals)->ntbl, ID2SYM(id), 0)) {
|
||||||
return Qtrue;
|
return Qtrue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user