Project

General

Profile

Actions

Bug #6030

closed

Thread-local "leak" in rb_exec_recursive*

Added by headius (Charles Nutter) about 12 years ago. Updated almost 5 years ago.

Status:
Closed
Target version:
-
ruby -v:
1.9.3 head
[ruby-core:42665]

Description

I believe there may be a "leak" in the rb_exec_recursive* functions in thread.c.

We have ported these methods for recursion detection in JRuby, and as in MRI they use a map inside a thread-local to track method name + object references. However, none of these method ever clean up the thread local when the recursive walk is complete.

The thread-local data is initialized in thread.c, recursive_list_access, around line 3819 (in 1.9.3 branch):

if (NIL_P(hash) || TYPE(hash) != T_HASH) {
hash = rb_hash_new();
OBJ_UNTRUST(hash);
rb_thread_local_aset(rb_thread_current(), recursive_key, hash);

As far as I can tell, this thread-local is never cleared, holding a hash reference for as long as the thread is alive.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0