ruby: Check Ruby callback exists before we call it (RHBZ#733297).

This commit is contained in:
Richard W.M. Jones
2011-08-25 13:56:09 +01:00
parent 675f336319
commit 1a4f1df77e

View File

@@ -246,13 +246,21 @@ ruby_event_callback_wrapper_wrapper (VALUE argvv)
VALUE fn, eventv, event_handlev, bufv, arrayv;
fn = argv[0];
eventv = argv[1];
event_handlev = argv[2];
bufv = argv[3];
arrayv = argv[4];
rb_funcall (fn, rb_intern (\"call\"), 4,
eventv, event_handlev, bufv, arrayv);
/* Check the Ruby callback still exists. For reasons which are not
* fully understood, even though we registered this as a global root,
* it is still possible for the callback to go away (fn value remains
* but its type changes from T_DATA to T_NONE). (RHBZ#733297)
*/
if (rb_type (fn) != T_NONE) {
eventv = argv[1];
event_handlev = argv[2];
bufv = argv[3];
arrayv = argv[4];
rb_funcall (fn, rb_intern (\"call\"), 4,
eventv, event_handlev, bufv, arrayv);
}
return Qnil;
}