Saving Proc object in C extension

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.

“V” == Victor S. [email protected] 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

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.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs