[#15707] Schedule for the 1.8.7 release — "Akinori MUSHA" <knu@...>

Hi, developers,

21 messages 2008/03/01

[#15740] Copy-on-write friendly garbage collector — Hongli Lai <hongli@...99.net>

Hi.

31 messages 2008/03/03
[#15742] Re: Copy-on-write friendly garbage collector — Yukihiro Matsumoto <matz@...> 2008/03/03

Hi,

[#15829] Re: Copy-on-write friendly garbage collector — Daniel DeLorme <dan-ml@...42.com> 2008/03/08

Yukihiro Matsumoto wrote:

[#15756] embedding Ruby 1.9.0 inside pthread — "Suraj Kurapati" <sunaku@...>

Hello,

18 messages 2008/03/03
[#15759] Re: embedding Ruby 1.9.0 inside pthread — Nobuyoshi Nakada <nobu@...> 2008/03/04

Hi,

[#15760] Re: embedding Ruby 1.9.0 inside pthread — Yukihiro Matsumoto <matz@...> 2008/03/04

Hi,

[#15762] Re: embedding Ruby 1.9.0 inside pthread — "Suraj N. Kurapati" <sunaku@...> 2008/03/04

Yukihiro Matsumoto wrote:

[#15783] Adding startup and shutdown to Test::Unit — Daniel Berger <Daniel.Berger@...>

Hi all,

15 messages 2008/03/04

[#15835] TimeoutError in core, timeouts for ConditionVariable#wait — MenTaLguY <mental@...>

I've been reworking JRuby's stdlib to improve performance and fix

10 messages 2008/03/09

[#15990] Recent changes in Range#step behavior — "Vladimir Sizikov" <vsizikov@...>

Hi,

35 messages 2008/03/23
[#15991] Re: Recent changes in Range#step behavior — Dave Thomas <dave@...> 2008/03/23

[#15993] Re: Recent changes in Range#step behavior — "Vladimir Sizikov" <vsizikov@...> 2008/03/23

Hi Dave,

[#15997] Re: Recent changes in Range#step behavior — Dave Thomas <dave@...> 2008/03/23

[#16024] Re: Recent changes in Range#step behavior — "Vladimir Sizikov" <vsizikov@...> 2008/03/26

Hi Dave,

[#16025] Re: Recent changes in Range#step behavior — Yukihiro Matsumoto <matz@...> 2008/03/26

Hi,

[#16026] Re: Recent changes in Range#step behavior — Dave Thomas <dave@...> 2008/03/26

[#16027] Re: Recent changes in Range#step behavior — Yukihiro Matsumoto <matz@...> 2008/03/26

Hi,

[#16029] Re: Recent changes in Range#step behavior — Dave Thomas <dave@...> 2008/03/26

[#16030] Re: Recent changes in Range#step behavior — Yukihiro Matsumoto <matz@...> 2008/03/26

Hi,

[#16031] Re: Recent changes in Range#step behavior — Dave Thomas <dave@...> 2008/03/26

[#16032] Re: Recent changes in Range#step behavior — "Vladimir Sizikov" <vsizikov@...> 2008/03/26

On Wed, Mar 26, 2008 at 7:01 PM, Dave Thomas <dave@pragprog.com> wrote:

[#16033] Re: Recent changes in Range#step behavior — Dave Thomas <dave@...> 2008/03/26

[#16041] Re: Recent changes in Range#step behavior — David Flanagan <david@...> 2008/03/26

Dave Thomas wrote:

Re: Are Depreciated Methods "add_final" & "remove_final" supposed to ACTUALLY WORK?

From: Charles Thornton <ceo@...>
Date: 2008-03-18 12:04:09 UTC
List: ruby-core #15939
ts wrote:
>>>>>> "C" == Charles Thornton <ceo@hawthorne-press.com> writes:
>>>>>>             
>
> C>    add_final and remove_final  DO NOT WORK
>
>  no, no it work. It's just a little strange :-)
>
> vgs% ruby -e 'a = "A"; ObjectSpace.add_finalizer(proc { p 12 }); ObjectSpace.call_finalizer(a); p 24'
> -e:1: warning: ObjectSpace::add_finalizer is deprecated; use define_finalizer
> -e:1: warning: ObjectSpace::call_finalizer is deprecated; use define_finalizer
> 24
> 12
> vgs% 
>
> C>     If they are supposed to be non-functional a lot
> C> of their code is still in place.
>
>  add_finalizer was deprecated since 1.6.0 if I'm right.
>
> Guy Decoux
>
>
>
>
>   
I should have been more clear!

"add_finalizer()" does not set the " need_call_final"
variable  to '1' .  Which means during GC,  objects are
not checked for finalizers added via "add_finalizer()"
unless "define_finalizer()" is also called!

Correct me if I am wrong.  But if GC runs across a
UNMARKED Object with a Finalizer during GC,
the object can be deleted WITHOUT the finalizer
ever running! 

This seems like a BUG to me!

The Following Modification Fixes the problem:

static VALUE
add_final(os, block)
    VALUE os, block;
{
    rb_warn("ObjectSpace::add_finalizer is deprecated; use 
define_finalizer");
    if (!rb_respond_to(block, rb_intern("call"))) {
    rb_raise(rb_eArgError, "wrong type argument %s (should be callable)",
         rb_obj_classname(block));
    }
    rb_ary_push(finalizers, block);  
    need_call_final = 1;                      /* Add this line! */
    return block;
}

   Chuck T.

In This Thread