Project

General

Profile

Actions

Bug #886

closed

GC from blocking region

Added by ko1 (Koichi Sasada) almost 16 years ago. Updated over 13 years ago.

Status:
Closed
Assignee:
-
Target version:
ruby -v:
Backport:
[ruby-dev:37448]

Description

=begin
 ささだです.

U.Nakamura wrote::

こんにちは、なかむら(う)です。

In message "[ruby-dev:37381] Re: Ruby開発ミーティングログ"
on Dec.11,2008 13:44:58, wrote:

  • Bug #755 [ruby-core:19946]: Windows specific. うささんに聞く (akr)
    対応パッチを作ってこの問題が解決するところまではたどり着いて
    るのですが、メモリ関連のバグを仕込んでいるらしく別のテストで
    [BUG]るようになってしまったので困っているところです。
    誰かパッチのバグを探してくれる人がいるならそのパッチを出しま
    すが...

これ、原因わかりました。

blocking region内でGCが発生すると、blocing regionじゃないスレ
ッド(なんか名前ないかな)のスタックが一切markされないため、そ
のスレッドでスタック上にあるVALUEが回収されてしまいます。
対策としては、

(1) blocking regionからGCが起こされたときはblocking regionじゃ
ないスレッドを止めてそのスレッドのスタックをmarkしてGCを
続行させる。
→ 無理がありそう

(2) blocking regionからGCを起こさせない

(a) xmalloc等は使用禁止とする
→ 面倒なのではないか

(b) blocking regionからxmalloc等が呼ばれたときはメモリ確保
できなくてもGCしない

といったあたりがIRCでは出ました。

(c) blocking_region の中で,さらに ruby な環境にさわれる状態になり(GVL
を取得する),メモリ確保を行う,ということが考えられます.性能はもちろん
落ちますが(使いどころを間違えると,とてもとても遅くなります),どーして
も必要な場合は使う,ってことが出来るかと思います.

--
// SASADA Koichi at atdot dot net
=end

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0