Ejemplo n.º 1
0
static VALUE
rb_disable_method_trace_for_thread(VALUE self)
{
    VALUE current_thread;
    VALUE thread_variables_hash;
    VALUE trace_set;
    ID locals_id;
    ID eval_trace_thread_id;
    VALUE eval_trace_thread_flag;

    CONST_ID(locals_id, "locals");
    CONST_ID(eval_trace_thread_id, "gcloud_eval_trace_set");
    eval_trace_thread_flag = ID2SYM(eval_trace_thread_id);

    current_thread = rb_thread_current();
    thread_variables_hash = rb_ivar_get(current_thread, locals_id);
    trace_set = rb_hash_aref(thread_variables_hash, eval_trace_thread_flag);

    if (RTEST(trace_set)) {
        rb_thread_remove_event_hook(current_thread, (rb_event_hook_func_t)eval_trace_callback);
        rb_hash_aset(thread_variables_hash, eval_trace_thread_flag, Qfalse);
    }

    return Qnil;
}
Ejemplo n.º 2
0
/**
 *  disable_return_trace_for_thread
 *  Turn off return events trace hook for a given thread. If no thread is given, it
 *  turns off line event trace hook in current thread. It only takes action if
 *  the thread has a thread variable "gcloud_return_trace_set" that's true.
 */
static VALUE
disable_return_trace_for_thread(VALUE thread)
{
    VALUE thread_variables_hash;
    VALUE return_trace_set;
    ID locals_id;
    ID return_trace_thread_id;
    VALUE return_trace_thread_flag;

    CONST_ID(locals_id, "locals");
    CONST_ID(return_trace_thread_id, "gcloud_return_trace_set");
    return_trace_thread_flag = ID2SYM(return_trace_thread_id);

    if (!RTEST(thread)) {
        thread = rb_thread_current();
    }
    thread_variables_hash = rb_ivar_get(thread, locals_id);
    return_trace_set = rb_hash_aref(thread_variables_hash, return_trace_thread_flag);

    if (RTEST(return_trace_set)) {
        rb_thread_remove_event_hook(thread, (rb_event_hook_func_t)return_trace_callback);
        rb_hash_aset(thread_variables_hash, return_trace_thread_flag, Qfalse);
    }

    return Qnil;
}
Ejemplo n.º 3
0
static VALUE
cb_unset_tracer(VALUE self) {
  if(rb_iv_get(self, "@tracer_set")) {
    rb_thread_remove_event_hook(rb_thread_current(), trace_line_handler_ext);
    rb_iv_set(self, "@tracer_set", Qfalse);
  }
  return Qnil;
}