[#23805] net/smtp — 佐藤 大輔 <densuke@...2.so-net.ne.jp>

佐藤です。

26 messages 2000/07/12
[#23806] Re: net/smtp — matz@... (Yukihiro Matsumoto) 2000/07/12

まつもと ゆきひろです

[#23808] Re: net/smtp — 佐藤 大輔 <densuke@...2.so-net.ne.jp> 2000/07/12

佐藤です。

[#23809] Re: net/smtp — matz@... (Yukihiro Matsumoto) 2000/07/12

まつもと ゆきひろです

[#23811] Re: net/smtp — Minero Aoki <aamine@...> 2000/07/12

あおきです。

[#23812] Re: net/smtp — matz@... (Yukihiro Matsumoto) 2000/07/12

まつもと ゆきひろです

[#23890] Ruby Entry Package and cygwin1.dll — Noritsugu Nakamura <nnakamur@...>

25 messages 2000/07/18
[#23895] Re: Ruby Entry Package and cygwin1.dll — WATANABE Hirofumi <eban@...> 2000/07/18

わたなべです.

[#23896] Re: Ruby Entry Package and cygwin1.dll — Noritsugu Nakamura <nnakamur@...> 2000/07/18

[#23897] Re: Ruby Entry Package and cygwin1.dll — Katsuyuki Komatsu <komatsu@...> 2000/07/19

小松です。

[#23898] Re: Ruby Entry Package and cygwin1.dll — WATANABE Hirofumi <eban@...> 2000/07/19

わたなべです.

[#23899] Re: Ruby Entry Package and cygwin1.dll — Katsuyuki Komatsu <komatsu@...> 2000/07/19

小松です。

[#23923] Re: [ruby-dev:10353] Re: should prohibit `module_function' for class Class — Masatoshi SEKI <m_seki@...>

11 messages 2000/07/19

[#23940] String#unpack と scanf の関係 — kiwamu <kiwamu@...>

こんにちは。岡部@東京都立大学と申します。

16 messages 2000/07/20

[ruby-list:23727] Re: context switch during finalizer(Re: Re: Flyweight)

From: Masatoshi SEKI <m_seki@...>
Date: 2000-07-06 15:26:52 UTC
List: ruby-list #23727
咳です。

私も自信ないんです。

> |# finalizer の中って Thread スイッチするのですか ??
> |# そうすると危険かも…
> 
> えー、どう危険なんですか?
> そういうの(も)無知なんで教えてください。


わかりにくく書いてしまってごめんなさい。

finalizer の中での thred スイッチが危険なのではなくて、
  o [ruby-list:23715]の咳のスクリプト(flyaway.rb)が、
    finalizerでスイッチするとバグりそうだ、
という意味です。


二つのクラス定数の表をfinalizerのコールバックの中で操作するのですが、
保護しておかないといけない様な予感がしました。
んで、よく考えたのですがやっぱり Mutex による保護が必要なようです。



次に、なぜ「finalizerの中ではスイッチしないのかな?」と思ったかに
ついてです。

flyaway.rbはweakref.rbを参考にしたのですが、weakref も二つの
クラス定数の表の操作があって、保護していないんです。
例えば、weakref.rbのfinalizerのコールバック中で

    29                                rid = ID_REV_MAP[id]
    30                                if rid
    31                                  ID_REV_MAP[id] = nil
    32                                  ID_MAP[rid].delete(id)
    33                                  ID_MAP[rid] = nil if ID_MAP[rid].empty?
    34                                end
 
としていますが、initialize メソッドの中で

    42      ID_MAP[@__id] = [] unless ID_MAP[@__id]
    43      ID_MAP[@__id].push self.__id__
    44      ID_REV_MAP[self.id] = @__id

という部分があって、33行で nil にするところと 42, 43 行で
[] をセットして push する部分とかが競合しそうですよね。

あるオブジェクトのWeakRefがGCされる時に、
おなじオブジェクトへの別のWeakRefが生成されるときかな。(運悪い…)

# 実際にはそういう状況にならないのかもしれませんが…



In This Thread