void SharedState::reset_threads(STATE, GCToken gct, CallFrame* call_frame) { VM* current = state->vm(); current->after_fork_child(state); for(ThreadList::iterator i = threads_.begin(); i != threads_.end(); ++i) { if(VM* vm = (*i)->as_vm()) { if(vm == current) { vm->metrics().init(metrics::eRubyMetrics); state->vm()->metrics().system_metrics.vm_threads_created++; continue; } if(Thread* thread = vm->thread.get()) { if(!thread->nil_p()) { thread->unlock_after_fork(state, gct); thread->stopped(); } } vm->reset_parked(); } } threads_.clear(); threads_.push_back(current); }