From: mame@... Date: 2018-12-12T16:00:42+00:00 Subject: [ruby-core:90451] [Ruby trunk Bug#6030][Feedback] Thread-local "leak" in rb_exec_recursive* Issue #6030 has been updated by mame (Yusuke Endoh). Status changed from Assigned to Feedback Assignee changed from nobu (Nobuyoshi Nakada) to headius (Charles Nutter) This ticket was discussed at today's developer meeting. Nobu said that per-method entries are removed when it becomes unneeded. So, the "leak" is one hash object per thread. Correct? If so, it is not a big deal. Let us know if we missed something. ---------------------------------------- Bug #6030: Thread-local "leak" in rb_exec_recursive* https://bugs.ruby-lang.org/issues/6030#change-75612 * Author: headius (Charles Nutter) * Status: Feedback * Priority: Normal * Assignee: headius (Charles Nutter) * Target version: * ruby -v: 1.9.3 head * Backport: 2.4: UNKNOWN, 2.5: UNKNOWN ---------------------------------------- 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. -- https://bugs.ruby-lang.org/ Unsubscribe: