Add a README section about the MRI stuck/crash behavior

This commit is contained in:
Markus Schirp 2014-11-03 14:07:49 +00:00
parent 1fd5575871
commit 739644e149

View file

@ -74,7 +74,7 @@ Install the gem `mutant` via your preferred method.
gem install mutant 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. Please add an explicit dependency to `rspec-core` for the RSpec version you want to use.
```ruby ```ruby
@ -83,6 +83,31 @@ gem install mutant-rspec
The minitest integration is still in the works. 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 Examples
-------- --------