Actions
Bug #6030
closedThread-local "leak" in rb_exec_recursive*
Bug #6030:
Thread-local "leak" in rb_exec_recursive*
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