[#44586] [Ruby 1.9 - Bug #5423][Open] readlineの入力待機中に端末のウィンドウサイズ変更すると入力内容が乱れる — Takuto Matsuu <matsuu@...>

8 messages 2011/10/08

[#44589] [Ruby 1.9 - Bug #5429][Open] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合 — Makoto Kishimoto <redmine@...>

21 messages 2011/10/09

[#44604] Ruby 2.0 release plan — "NARUSE, Yui" <naruse@...>

ささださんが既にいくつか 2.0 関連のメールを投げていらっしゃいますが、

75 messages 2011/10/18
[#44607] Re: Ruby 2.0 release plan — Yukihiro Matsumoto <matz@...> 2011/10/18

まつもと ゆきひろです

[#44618] Re: Ruby 2.0 release plan — "NARUSE, Yui" <naruse@...> 2011/10/18

(2011/10/18 16:15), Yukihiro Matsumoto wrote:

[#44619] Re: Ruby 2.0 release plan — Yukihiro Matsumoto <matz@...> 2011/10/18

まつもと ゆきひろです

[#44627] Re: Ruby 2.0 release plan — Urabe Shyouhei <shyouhei@...> 2011/10/19

On 10/18/2011 10:16 PM, Yukihiro Matsumoto wrote:

[#44629] Re: Ruby 2.0 release plan — Yukihiro Matsumoto <matz@...> 2011/10/19

まつもと ゆきひろです

[#44631] Re: Ruby 2.0 release plan — Urabe Shyouhei <shyouhei@...> 2011/10/19

たとえば2.0の次のバージョン番号はどうしますか?

[#44633] Re: Ruby 2.0 release plan — "NARUSE, Yui" <naruse@...> 2011/10/20

2011年10月20日3:31 Urabe Shyouhei <shyouhei@ruby-lang.org>:

[#44612] Re: Ruby 2.0 release plan — Yusuke Endoh <mame@...> 2011/10/18

遠藤です。

[#44707] [ruby-trunk - Feature #5512][Open] Integer#/ の改訂 — tadayoshi funaba <redmine@...>

13 messages 2011/10/30

[#44719] [ruby-trunk - Feature #5520][Open] Numeric#exact?、Numeric#inexact? の追加 — tadayoshi funaba <redmine@...>

13 messages 2011/10/31

[ruby-dev:44579] [Ruby 1.9 - Bug #5386] FiberオブジェクトのGC時にSEGV

From: Tomoyuki Chikanaga <nagachika00@...>
Date: 2011-10-05 03:46:27 UTC
List: ruby-dev #44579
Issue #5386 has been updated by Tomoyuki Chikanaga.


確認いただきありがとうございます。コミットしておきます。
ただ作業できるのが夜になってからなので、先にどなたかコミットして頂いてもわたしはかまいません。
----------------------------------------
Bug #5386: FiberオブジェクトのGC時にSEGV
http://redmine.ruby-lang.org/issues/5386

Author: Kazuki Tsujimoto
Status: Assigned
Priority: Normal
Assignee: Kazuki Tsujimoto
Category: core
Target version: 
ruby -v: ruby 1.9.4dev (2011-10-01 trunk 33368) [x86_64-linux]


=begin
辻本です。

ポータブルな再現コードが作れていないのですが、
Ubuntu 10.04 x86_64にて以下のコードを実行すると
FiberオブジェクトをGCする処理の中でSEGVします。

 require 'fiber'
 
 1.times {
   Fiber.new{}
 }
 
 2.times.map {|i|
   Thread.new {
     Fiber.new{}.resume
   }.join
 }.each {|t|
   t.join
 }
 
 GC.start
 GC.stress = true
 
 1.times {
   Fiber.new{}
 }

バックトレースを添付します。

調べてみたところ、GC.stress設定後の1回目のマークフェーズで

 Breakpoint 2, fiber_mark (ptr=0xad7130) at cont.c:265
 (gdb) rp ((rb_fiber_t*)ptr)->cont->saved_thread.self
 T_DATA(VM/thread): $1 = (struct RTypedData *) 0xaaf528

となっているFiberオブジェクトが、2回目のマークフェーズでは

 Breakpoint 2, fiber_mark (ptr=0xad7130) at cont.c:265
 (gdb) rp ((rb_fiber_t*)ptr)->cont->saved_thread.self
 T_NONE: $2 = (struct RBasic *) 0xaaf528

となっており、saved_thread.selfのマーク漏れのようです。

以下の修正で直りました。

 diff --git a/vm.c b/vm.c
 index 665351b..2ab2b92 100644
 --- a/vm.c
 +++ b/vm.c
 @@ -1735,6 +1735,7 @@ rb_thread_mark(void *ptr)
  	RUBY_MARK_UNLESS_NULL(th->first_proc);
  	if (th->first_proc) RUBY_MARK_UNLESS_NULL(th->first_args);
  
 +	RUBY_MARK_UNLESS_NULL(th->self);
  	RUBY_MARK_UNLESS_NULL(th->thgroup);
  	RUBY_MARK_UNLESS_NULL(th->value);
  	RUBY_MARK_UNLESS_NULL(th->errinfo);
=end



-- 
http://redmine.ruby-lang.org

In This Thread

Prev Next