/*
* call-seq:
* Debugger.suspend -> Debugger
*
* Suspends all contexts.
*/
static VALUE
debug_suspend(VALUE self)
{
VALUE current, context;
VALUE saved_crit;
VALUE context_list;
debug_context_t *debug_context;
int i;
debug_check_started();
saved_crit = rb_thread_critical;
rb_thread_critical = Qtrue;
context_list = debug_contexts(self);
thread_context_lookup(rb_thread_current(), ¤t, NULL);
for(i = 0; i < RARRAY(context_list)->len; i++)
{
context = rb_ary_entry(context_list, i);
if(current == context)
continue;
Data_Get_Struct(context, debug_context_t, debug_context);
context_suspend_0(debug_context);
}
rb_thread_critical = saved_crit;
if(rb_thread_critical == Qfalse)
rb_thread_schedule();
return self;
}