[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Saving Proc object in C extension

Victor 'Zverok' Shepelev

3/26/2006 2:43:00 PM

Hi all.

The question is: can I save some Proc object in global variable of C
extension?

What I've tried:

static VALUE g_callback;

//some callback-saving function:
static VALUE save_callback(VALUE self, VALUE proc)
{
...bla-bla-bla...

rb_global_variable(&proc); //as recommended in "Extending Ruby"

g_callback = proc;

...bla-bla-bla...
}

But when I've tried to use the saved g_callback later, I've received various
errors. Moreover,

rb_p(g_callback);

prints some garbage or crashes (just like object g_callback references is
deleted). Raw integer value of g_callback remains unchanged.

What I do wrong?

Thanks.

Victor.



2 Answers

ts

3/26/2006 2:54:00 PM

0

>>>>> "V" == Victor Shepelev <vshepelev@imho.com.ua> writes:

V> static VALUE save_callback(VALUE self, VALUE proc)
V> {
V> ...bla-bla-bla...

V> rb_global_variable(&proc); //as recommended in "Extending Ruby"

proc is on the stack, after the end of save_callback() &proc don't make
reference to the proc object.

V> What I do wrong?

This is g_callback which must be registered.

static VALUE g_callback;

static VALUE save_callback(VALUE self, VALUE proc)
{
/* ... */
g_callback = proc;
/* ... */
}

/* ... */

void Init_bla_bla_bla()
{
/* ... */
g_callback = Qnil;
rb_global_variable(&g_callback);
/* ... */
}


Guy Decoux


Victor 'Zverok' Shepelev

3/26/2006 3:05:00 PM

0

> >>>>> "V" == Victor Shepelev <vshepelev@imho.com.ua> writes:
>
> V> static VALUE save_callback(VALUE self, VALUE proc)
> V> {
> V> ...bla-bla-bla...
>
> V> rb_global_variable(&proc); //as recommended in "Extending Ruby"
>
> proc is on the stack, after the end of save_callback() &proc don't make
> reference to the proc object.
>
> V> What I do wrong?
>
> This is g_callback which must be registered.

Thanks Guy! I've expected rb_global_variable uses only value of proc, not
address. Now I've understand my error.

Thanks!

> Guy Decoux

Victor.