Getting the associated exception instance after using rb_protect()

Hi, by using rb_protect() I can get an integer “exception” which I can
use within rb_jump_tag(exception) and that causes the exception to be
executed.

Ok, but what I need is the associated Ruby exception object that
“exception” integer points to. How to get it?

Thanks a lot.

2012/4/30 Iaki Baz C. [email protected]:

Hi, by using rb_protect() I can get an integer “exception” which I can
use within rb_jump_tag(exception) and that causes the exception to be
executed.

Ok, but what I need is the associated Ruby exception object that
“exception” integer points to. How to get it?

If I remember correctly, you can get an “active” exception for the
current
thread with rb_errinfo.

-Martin

2012/4/30 Martin Boßlet [email protected]:

Ok, but what I need is the associated Ruby exception object that
“exception” integer points to. How to get it?

If I remember correctly, you can get an “active” exception for the current
thread with rb_errinfo.

Thanks, it does the job :slight_smile:

However I’ve a second problem:

I use rb_protect() so the exception is not executed and, indeed, I can
get it (the VALUE) using rb_errinfo().

The problem is that the exception seems to remain “alive” in the
thread, so when the thread ends the exception is raised!
How to avoid that? this is: how to tell the thread “please forgive the
last exception forever”?

Thanks a lot.

2012/4/30 Martin Boßlet [email protected]:

rb_set_errinfo(Qnil);

should “swallow” the exception. However, there could be a more
elegant way to this…

And again it properly works :slight_smile:

Thanks a lot.

Untested, but again I think setting the active exception to nil by
issuing

rb_set_errinfo(Qnil);

should “swallow” the exception. However, there could be a more
elegant way to this…

-Martin