From 739644e14913ea4b7445a2a0a4a20e86a1ad67c7 Mon Sep 17 00:00:00 2001 From: Markus Schirp Date: Mon, 3 Nov 2014 14:07:49 +0000 Subject: [PATCH] Add a README section about the MRI stuck/crash behavior --- README.md | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 48043146..b22608fa 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,7 @@ Install the gem `mutant` via your preferred method. gem install mutant ``` -If you plan to use the RSpec integration you'll have to install `mutant-rspec` also. +If you plan to use the RSpec integration you'll have to install `mutant-rspec` also. Please add an explicit dependency to `rspec-core` for the RSpec version you want to use. ```ruby @@ -83,6 +83,31 @@ gem install mutant-rspec The minitest integration is still in the works. +The Crash / Stuck Problem (MRI) +------------------------------- + +Mutations generated by mutant can cause MRI to enter VM states its not prepared for. +All MRI versions above 1.9 are affected by this depending on your compiler flags, compiler version, +and OS scheduling behavior. + +This can have the following unintended effects: + +* MRI crashes with a segfault. Mutant kills each mutation in a dedicated fork to isolate + the mutations side effects when this fork terminates abnormally (segfault) mutant + counts the mutation as killed. + +* MRI crashes with a segfault and gets stuck when handling the segfault. + Depending on the number of active kill jobs mutant might appear to continue normally untill + all workers are stuck into this state when it begins to hang. + Currently mutant must assume that your test suite simply not terminated yet as from the outside + (parent process) the difference between a long running test and a stuck MRI is not observable. + Its planned to implement a timeout enforced from the parent process, but ideally MRI simply gets fixed. + +References: + +* Mutant bug: https://github.com/mbj/mutant/issues/265 +* Upstream bug: https://bugs.ruby-lang.org/issues/10460 + Examples --------