Bug #9905
closedFiber does not work on AIX
Description
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-aix7.1.0.0]
Here is what happens for this test:
- A fiber is created by setting
context->uc_stack.ss_size
to a certain value and callingmakecontext()
. - While the fiber is switched with other fibers by
swapcontext()
,context->uc_stack.ss_size
is changed to a very large value by AIX. - When the fiber finishes, its stack pointer and size are cached in
machine_stack_cache[]
. - 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 makecontext()
or 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.
Files
Updated by nobu (Nobuyoshi Nakada) almost 10 years ago
- Description updated (diff)
- Category set to platform/aix
- Status changed from Open to Assigned
- Assignee set to kanemoto (Yutaka Kanemoto)
- Target version set to 2.2.0
Seems fine.
Updated by ReiOdaira (Rei Odaira) about 8 years ago
- Backport changed from 2.0.0: UNKNOWN, 2.1: UNKNOWN to 2.0.0: UNKNOWN, 2.1: REQUIRED
Could you back-port this to 2.1 as well? Thanks.
Updated by naruse (Yui NARUSE) about 8 years ago
- Status changed from Assigned to Closed
Change status as Closed to enqueue backport.
Updated by usa (Usaku NAKAMURA) about 8 years ago
- Backport changed from 2.0.0: UNKNOWN, 2.1: REQUIRED to 2.0.0: UNKNOWN, 2.1: DONE
ruby_2_1 r54273 merged revision(s) 46373.