void
AsyncAccessManager::final_state (bool active)
{
  bool success = this->status_ == ImplementationRepository::AAM_SERVER_READY;
  this->info_.edit (active)->started (success);
  this->retries_ = this->info_->start_limit_;
  if (active)
    {
      this->info_.update_repo ();
    }
  this->notify_waiters ();
  this->manual_start_ = false;

  if (active)
    {
      this->info_.notify_remote_access (this->status_);
    }
  if (this->info_->is_mode (ImplementationRepository::PER_CLIENT) ||
      this->status_ != ImplementationRepository::AAM_SERVER_READY)
    {
      if (ImR_Locator_i::debug () > 5)
        {
          ORBSVCS_DEBUG ((LM_DEBUG,
                          ACE_TEXT ("(%P|%t) AsyncAccessManager(%@)::final_state ")
                          ACE_TEXT ("removing this from map, server = %s\n"),
                          this, info_->ping_id ()));
        }
      AsyncAccessManager_ptr aam (this);
      this->locator_.remove_aam (aam);
      aam._retn(); // release w/o decrementing since table held last reference.
    }
}
AsyncAccessManager *
ImR_Locator_i::create_aam (UpdateableServerInfo &info, bool running)
{
  AsyncAccessManager_ptr aam;
  ACE_NEW_RETURN (aam, AsyncAccessManager (info, *this), 0);
  if (running)
    {
      aam->started_running ();
    }
  {
    this->aam_active_.insert_tail (aam);
  }
  return aam._retn ();
}