Fiber does not work on AIX
test/ruby/test_fiber.rb fails on AIX.
[ 2/23] TestFiber#test_argument/ss/home/rayod/Dev/Contribution/ruby-trunk-blue1/test/ruby/test_fiber.rb:19: [BUG] machine_stack_cache size is not canonicalized ruby 2.2.0dev (2014-06-02 trunk 45270) [powerpc-aix18.104.22.168]
Here is what happens for this test:
- A fiber is created by setting
context->uc_stack.ss_sizeto a certain value and calling
- While the fiber is switched with other fibers by
context->uc_stack.ss_sizeis changed to a very large value by AIX.
- When the fiber finishes, its stack pointer and size are cached in
- When a new fiber is created, a specified stack size is different from the cached stack size, so the error is thrown.
I feel AIX's behavior is strange, but I also suppose in general,
context->uc_stack.ss_size is not guaranteed to be preserved after
swapcontext(). (Please correct me if I am wrong.)
Rather than disabling
FIBER_USE_NATIVE for AIX, I propose saving the original stack pointer and size not in
ucontext_t but in new dedicated fields in
rb_fiber_t, as you can find in the attached patch. With this patch,
test/ruby/test_fiber.rb results in no errors on AIX. This did not cause any error on Linux, either, for test or test-all.
merge revision(s) 46373: [Backport #9905]
* cont.c (rb_fiber_struct): keep context.uc_stack.ss_sp and context.uc_stack.ss_size for later use. Patch by Rei Odaira. [ruby-core:62945] [Bug #9905]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@54273 b2dd03c8-39d4-4d8f-98ff-823fe69b080e