RVM Patchsets for MRI-Ruby
Over time, I have developed a number of patches to MRI ruby which I use in all my projects. I maintain them using stgit. This repository provides them as patchsets for RVM.
They are also frequently merged into the main rvm repository, so usually you can use them directly after installing/updating rvm.
To use the a recent version of the patchsets, just update rvm:
rvm get head # OR rvm get stable
If rvm isn't update to date yet, or you can easily install them from this repository:
clone the repository to some convenient place
cd into the top level directory
This will automatically remove old versions of the patchsets.
Reinstall the rubies you want to patch:
rvm reinstall 1.8.7 --patch railsexpress rvm reinstall 1.9.2 --patch railsexpress rvm reinstall 1.9.3 --patch railsexpress
Alternatively, you can pass the ruby version to reinstall to the install script:
./install.sh 1.8.7 1.9.2 1.9.3
IF you don't want to mess up your vanilla rubies, pass a -n flag to rvm when installing the patches:
rvm reinstall 1.8.7 --patch railsexpress -n railsexpress rvm reinstall 1.9.2 --patch railsexpress -n railsexpress rvm reinstall 1.9.3 --patch railsexpress -n railsexpress
This will then require you to specify the ruby version for rvm like so:
rvm use 1.9.2-railsexpress
The patches are for specific versions of ruby. They might work with later versions, but there's no guarantee. The following versions are currently supported:
1.8.7-p334 # not recommended, as p352 fixes a serious GC corruption problem 1.8.7-p352 # not recommended, use at least p358 1.8.7-p357 # fixes a DOS vulnerability in 1.8.7 1.8.7-p358 # current rvm default for MRI-ruby 1.8.7 1.9.2-p180 # 1.9.2-p290 # 1.9.2-p318 # 1.9.2-p320 # current rvm default for MRI-ruby 1.9.2 1.9.3-p125 # 1.9.3-p194 # current rvm default for MRI-ruby 1.9.3
In order to make some patch level n the default for rvm, add the line
To enable heap dump support, pass the –enable-gcdebug option to the rvm install command.
rvm reinstall 1.8.7 --patch railsexpress -C --enable-gcdebug -n gcdebug rvm reinstall 1.9.2 --patch railsexpress -C --enable-gcdebug -n gcdebug rvm reinstall 1.9.3 --patch railsexpress -C --enable-gcdebug -n gcdebug
If rvm cannot configure your ruby, update your rvm install.
Using patches for ruby-branches (1.8.7/1.9.3 only)
The most recent patch level on the ruby_1_8_7 branch is 360. If you want to use it, you can install the corresponding ruby version with the following command:
rvm reinstall 1.8.7-head --patch railsexpress -n railsexpress
You can then use it with the command
rvm use 1.8.7-head-railsexpress
Note that the patch contained in patch level 359 fixes a serious bug in the ruby marshaling code, which can crash the ruby interpreter.
On 1.9.3, you can install head similarly:
rvm reinstall 1.9.3-head --patch railsexpress -n railsexpress
If you find problems with the patches, please do not send pull requests which patch patches. I will ignore these.
Instead, add new patches on top of the existing ones. Then they will have a chance.
The 1.9.3 patches heave not received a lot of testing. Use at your own risk!
Some of the patches are based on the work of others (some of them are included in ruby enterprise edition)
sigvtalrm patch: timetobleed.com/ruby-threading-bugfix-small-fix-goes-a-long-way
malloc size tracking: blog.pluron.com/2008/02/memory-profilin.html
object allocation tracking: rubyforge.org/tracker/index.php?func=detail&aid=11497&group_id=426&atid=1700
caller for all threads: ph7spot.com/musings/caller-for-all-threads
load performance patch: github.com/ruby/ruby/commit/9ce69e7cef1272c86a93eeb9a1888fe6d2a94704#load.c