From 428791543be9e13af9426970f5796f3157dd30a0 Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 9 Dec 2014 01:16:27 +0000 Subject: thread.c: get rid of invalid ID symbol * eval.c (rb_frame_last_func): return the most recent frame method name. * thread.c (recursive_list_access): use the last method name, instead of the current method name which can be unset in some cases, not to use a symbol by the invalid ID. [ruby-core:66742] [Bug #10579] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48744 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- thread.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'thread.c') diff --git a/thread.c b/thread.c index 25cc2143e9..360c6cb6b9 100644 --- a/thread.c +++ b/thread.c @@ -4696,6 +4696,8 @@ threadptr_recursive_hash_set(rb_thread_t *th, VALUE hash) th->local_storage_recursive_hash = hash; } +ID rb_frame_last_func(void); + /* * Returns the current "recursive list" used to detect recursion. * This list is a hash table, unique for the current thread and for @@ -4707,7 +4709,8 @@ recursive_list_access(void) { rb_thread_t *th = GET_THREAD(); VALUE hash = threadptr_recursive_hash(th); - VALUE sym = ID2SYM(rb_frame_this_func()); + ID mid = rb_frame_last_func(); + VALUE sym = mid ? ID2SYM(mid) : ID2SYM(idNULL); VALUE list; if (NIL_P(hash) || !RB_TYPE_P(hash, T_HASH)) { hash = ident_hash_new(); -- cgit v1.2.3