 ===================================================================
 --- vm_insnhelper.c	(revision 26704)
 +++ vm_insnhelper.c	(working copy)
-@@ -367,23 +367,23 @@
+@@ -367,23 +367,25 @@
      const rb_method_definition_t *def = me->def;
      rb_control_frame_t *cfp;
  

 	{
 	    rb_control_frame_t *reg_cfp = th->cfp;
 	    rb_control_frame_t *cfp =
@@ -75,14 +74,15 @@
 			      recv, (VALUE)blockptr, 0, reg_cfp->sp, 0, 1);
 
 	    cfp->me = me;
+	    EXEC_EVENT_HOOK(th, RUBY_EVENT_C_CALL, recv, id, klass);
 	    val = call_cfunc(def->body.cfunc.func, recv, def->body.cfunc.argc, argc, argv);
 
 	    if (reg_cfp != th->cfp + 1) {
 		rb_bug("cfp consistency error - call0");
 	    }
+	    EXEC_EVENT_HOOK(th, RUBY_EVENT_C_RETURN, recv, id, klass);
 	    vm_pop_frame(th);
 	}
-	EXEC_EVENT_HOOK(th, RUBY_EVENT_C_RETURN, recv, id, klass);

 	rb_bug("cfp consistency error - send");
     }
 
+    if (th->tracing == 0)
+        EXEC_EVENT_HOOK(th, RUBY_EVENT_C_RETURN, recv, me->called_id, me->klass);
+
     vm_pop_frame(th);
 
