Issue #4289 has been updated by Eric Wong.

File 0002-introduce-ephemeral-class-flag-for-short-lived-class.patch added
File 0003-vm_method.c-ephemeral-classes-do-not-write-expire-ca.patch added
File 0003-vm_method.c-ephemeral-classes-do-not-write-expire-ca.patch added

I found a way to fix the issue without breaking user-facing code and still keep
performance :D

I just use a flag to mark a singleton class as ephemeral and have the method
cache bypass caching (and expiry) of short-lived ephemeral classes.

The series should be:
* 0001-revert-r29673-optimization-which-caused-segfaults.patch
* 0002-introduce-ephemeral-class-flag-for-short-lived-class.patch
* 0003-vm_method.c-ephemeral-classes-do-not-write-expire-ca.patch
* 0004-IO-Wait-able-extended-singleton-classes-are-ephemera.patch

Please ignore the following as noise:
* 0002-error.c-rb_mod_sys_fail-use-subclass-and-cache.patch
* 0001-test-socket-test_unix-fix-test-failures-from-rb_mod_.patch

If you use git, I am tracking this my "method-cache-clear" branch in my
repo: git pull git://bogomips.org/ruby method-cache-clear

I still think 0001-timeout.rb-avoid-introducing-new-class-for-every-tim.patch
will be useful, but less important.  The Timeout::ExitException subclass cannot
be marked as ephemeral from Ruby code...

----------------------------------------
Bug #4289: Timeouts in threads cause SEGV
http://redmine.ruby-lang.org/issues/4289

Author: Motohiro KOSAKI
Status: Assigned
Priority: Normal
Assignee: Akira Tanaka
Category: core
Target version: 1.9.3
ruby -v: ruby 1.9.3dev (2011-01-18 trunk 30591) [x86_64-linux]


 Derived from [Bug#4266]
 
 Running deadlock_test.rb in [Bug#4266] on trunk makes segfault. git bisect indicate
 first bad commit is below.
 
 ---------------------------------------------------------------------------
 commit d295957957c828588a8ca3c7b8619c7a93be6b5c
 Author: akr <akr / b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
 Date:   Tue Nov 2 22:37:08 2010 +0000
 
     * vm_method.c (rb_clear_cache_by_class): just return if the class has
       no method.  reported by Eric Wong.  [ruby-core:32689]
 
 
     git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29673 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
 
 --------------------------------------------------------------------------------
 
 Plus, I've confirmed latest trunk + revert d2959579 doesn't makes segfault.


-- 
http://redmine.ruby-lang.org