From: nobu@... Date: 2014-09-12T14:52:39+00:00 Subject: [ruby-core:65000] [ruby-trunk - Bug #10231] [Assigned] Process.detach(pid) defines new singleton classes every call Issue #10231 has been updated by Nobuyoshi Nakada. Category set to core Status changed from Open to Assigned Assignee set to Eric Wong Target version set to current: 2.2.0 Probably, you can use `rb_undef_alloc_func`. And should join the waiter thread. ---------------------------------------- Bug #10231: Process.detach(pid) defines new singleton classes every call https://bugs.ruby-lang.org/issues/10231#change-48877 * Author: Charles Nutter * Status: Assigned * Priority: Normal * Assignee: Eric Wong * Category: core * Target version: current: 2.2.0 * ruby -v: Any version with Process.detach * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN ---------------------------------------- The logic for Process.detach(pid) adds a singleton "pid" method to the thread it returns for every call. This is bad for method caches (MRI still flushes them all for this, I believe) and memory churn (singleton classes are not small). The offending line of code is here: https://github.com/ruby/ruby/blob/trunk/process.c#L1041 I would suggest that Process.detach should return a subclass of Thread that has the pid method defined ahead of time. It also stores the value in thread local storage, rather than as an instance variable. I'm not sure why. -- https://bugs.ruby-lang.org/