From: Eric Wong Date: 2011-04-09T15:54:58+09:00 Subject: [ruby-core:35672] [Ruby 1.9 - Bug #4289] Timeouts in threads cause SEGV 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 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