From: "michal@... (Michal Rokos)" Date: 2013-09-03T19:25:37+09:00 Subject: [ruby-core:56985] [ruby-trunk - Feature #8793] Ruby 2.0 and Threads under HPUX Issue #8793 has been updated by michal@rokos.cz (Michal Rokos). nobu (Nobuyoshi Nakada) wrote: > Thank you, and does this patch work? Patch compiles, but the 'make test' started to fail again, since the PTHREAD_STACK_MIN got back: sample/test.rb:signal sendsig: useracc failed. 0x2000000077773e00 0x00000000005000 Pid 15617 was killed due to failure in writing the signal context - possible stack overflow. #962 test_thread.rb:60:in `': core dumped #979 test_thread.rb:227:in `': core dumped #983 test_thread.rb:264:in `': (0..10).map { Thread.new { 10000.times { Object.new.to_s } } }.each {|t| t.join } #=> killed by SIGABRT (signal 6) | (MR) thid 1: p = 7ffff000, s = 142602240, addr = 887fe000, err = 0 | (MR) thid 1: p = 7ffff000, s = 142602240, addr = 887fe000, err = 0 | (MR) thid 1: p = 7ffff000, s = 142602240, addr = 887fe000, err = 0 | (MR) thid 1: p = 7ffff000, s = 142602240, addr = 887fe000, err = 0 | (MR) thid 7: p = 77771000, s = 524288, addr = 777f1000, err = 0 | bootstraptest.tmp.rb:5: [BUG] object allocation during garbage collection phase | ruby 2.1.0dev (2013-09-03 trunk 42801) [ia64-hpux11.31] | | -- Control frame information ----------------------------------------------- | c:0005 p:---- s:0012 e:000011 CFUNC :to_s | c:0004 p:0015 s:0009 e:000008 BLOCK bootstraptest.tmp.rb:5 [FINISH] | c:0003 p:---- s:0007 e:000006 CFUNC :times | c:0002 p:0008 s:0004 e:000003 BLOCK bootstraptest.tmp.rb:4 [FINISH] | c:0001 p:---- s:0002 e:000001 TOP [FINISH] | | bootstraptest.tmp.rb:4:in `block (2 levels) in
' | bootstraptest.tmp.rb:4:in `times' | bootstraptest.tmp.rb:5:in `block (3 levels) in
' | bootstraptest.tmp.rb:5:in `to_s' | | -- Other runtime information ----------------------------------------------- | | * Loaded script: bootstraptest.tmp.rb | | * Loaded features: | | 0 enumerator.so | | [NOTE] | You may have encountered a bug in the Ruby interpreter or extension libraries. | Bug reports are welcome. | For details: http://bugs.ruby-lang.org/ | #984 test_thread.rb:276:in `': core dumped [ruby-dev:34492] #1002 test_thread.rb:399:in `': core dumped FAIL 5/50 Just to compare values between merged version and the Comment #7 version: > ./miniruby -e 'Thread.new { sleep 5 }' (MR) pthread_self 1: _Asm_get_sp() = 7fffe3c0, *addr = 7ffbc000, size = 262144 [thread_pthread.c:535] (MR) addr = 7fffe400, stackaddr = 7fffc000, space = -9216, size = 262144 [thread_pthread.c:694] (MR) pthread_self 1: _Asm_get_sp() = 7fffde90, *addr = 7ffbc000, size = 262144 [thread_pthread.c:535] (MR) addr = 7fffded0, stackaddr = 7fffc000, space = -7888, size = 262144 [thread_pthread.c:694] (MR) pthread_self 1: _Asm_get_sp() = 7fffde90, *addr = 7ffbc000, size = 262144 [thread_pthread.c:535] (MR) addr = 7fffded0, stackaddr = 7fffc000, space = -7888, size = 262144 [thread_pthread.c:694] (MR) pthread_self 1: _Asm_get_sp() = 7fffe3a0, *addr = 7ffbc000, size = 262144 [thread_pthread.c:535] (MR) addr = 7fffe3e4, stackaddr = 7fffc000, space = -9188, size = 262144 [thread_pthread.c:694] (MR) pthread_self 3: _Asm_get_sp() = 77778fc0, *addr = 77738000, size = 262144 [thread_pthread.c:535] (MR) pthread_self 1: _Asm_get_sp() = 7fffd430, *addr = 7ffbc000, size = 262144 [thread_pthread.c:535] (MR) addr = 7fffd474, stackaddr = 7fffc000, space = -5236, size = 262144 [thread_pthread.c:694] and > ./miniruby -e 'Thread.new { sleep 5 }' (MR) thid 1: p = 7ffff000, s = 142602240, *addr = 887fe000, *size = 142602240 [thread_pthread.c:509] (MR) addr = 7fffe400, stackaddr = 887fe000, space = 142605312, size = 142602240 [thread_pthread.c:707] (MR) thid 1: p = 7ffff000, s = 142602240, *addr = 887fe000, *size = 142602240 [thread_pthread.c:509] (MR) addr = 7fffded0, stackaddr = 887fe000, space = 142606640, size = 142602240 [thread_pthread.c:707] (MR) thid 1: p = 7ffff000, s = 142602240, *addr = 887fe000, *size = 142602240 [thread_pthread.c:509] (MR) addr = 7fffded0, stackaddr = 887fe000, space = 142606640, size = 142602240 [thread_pthread.c:707] (MR) thid 1: p = 7ffff000, s = 142602240, *addr = 887fe000, *size = 142602240 [thread_pthread.c:509] (MR) addr = 7fffe3e4, stackaddr = 887fe000, space = 142605340, size = 142602240 [thread_pthread.c:707] (MR) thid 7: p = 77771000, s = 524288, *addr = 777f1000, *size = 524288 [thread_pthread.c:509] (MR) thid 1: p = 7ffff000, s = 142602240, *addr = 887fe000, *size = 142602240 [thread_pthread.c:509] (MR) addr = 7fffd474, stackaddr = 887fe000, space = 142609292, size = 142602240 [thread_pthread.c:707] ---------------------------------------- Feature #8793: Ruby 2.0 and Threads under HPUX https://bugs.ruby-lang.org/issues/8793#change-41570 Author: michal@rokos.cz (Michal Rokos) Status: Feedback Priority: Normal Assignee: Category: Target version: Use of Threads under HPUX currently raise rb_eNotImpError ("ruby engine can initialize only in the main thread") since the STACKADDR_AVAILABLE is not available. This brings basic support for the get_stack() under HPUX. This patch also resolves issue under HPUX where signals usually cause the coredump since the stack size is too small. It seems that the patch is valid not only for Ruby 2.0, but also for Ruby 1.9. -- http://bugs.ruby-lang.org/