1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* variable.c (classname): the name of class that has

non class id should not be nil. This bug was introduced
  in r36577.

* test/thread/test_cv.rb: test for change.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42867 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
ktsj 2013-09-07 04:58:38 +00:00
parent 0a4801e768
commit 113b1c76fc
3 changed files with 18 additions and 2 deletions

View file

@ -1,3 +1,11 @@
Sat Sep 7 13:49:40 2013 Kazuki Tsujimoto <kazuki@callcc.net>
* variable.c (classname): the name of class that has
non class id should not be nil. This bug was introduced
in r36577.
* test/thread/test_cv.rb: test for change.
Sat Sep 7 13:29:22 2013 Kazuki Tsujimoto <kazuki@callcc.net> Sat Sep 7 13:29:22 2013 Kazuki Tsujimoto <kazuki@callcc.net>
* lib/find.rb (Find.find): respect the encodings of arguments. * lib/find.rb (Find.find): respect the encodings of arguments.

View file

@ -82,20 +82,23 @@ class TestConditionVariable < Test::Unit::TestCase
end end
def test_condvar_wait_deadlock def test_condvar_wait_deadlock
assert_in_out_err([], <<-INPUT, ["No live threads left. Deadlock?"], []) assert_in_out_err([], <<-INPUT, ["fatal", "No live threads left. Deadlock?"], [])
require "thread" require "thread"
mutex = Mutex.new mutex = Mutex.new
cv = ConditionVariable.new cv = ConditionVariable.new
klass = nil
mesg = nil mesg = nil
begin begin
mutex.lock mutex.lock
cv.wait mutex cv.wait mutex
mutex.unlock mutex.unlock
rescue Exception => e rescue Exception => e
klass = e.class
mesg = e.message mesg = e.message
end end
puts klass
print mesg print mesg
INPUT INPUT
end end

View file

@ -177,9 +177,14 @@ classname(VALUE klass, int *permanent)
path = find_class_path(klass, (ID)0); path = find_class_path(klass, (ID)0);
} }
if (NIL_P(path)) { if (NIL_P(path)) {
if (!cid || !st_lookup(RCLASS_IV_TBL(klass), (st_data_t)tmp_classpath, &n)) { if (!cid) {
return Qnil; return Qnil;
} }
if (!st_lookup(RCLASS_IV_TBL(klass), (st_data_t)tmp_classpath, &n)) {
path = rb_str_dup(rb_id2str(cid));
OBJ_FREEZE(path);
return path;
}
*permanent = 0; *permanent = 0;
path = (VALUE)n; path = (VALUE)n;
return path; return path;