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);
  }