void basic_otp_mailbox_registry<Alloc, Mutex>::erase(mailbox_ptr a_mbox)
{
    if (!a_mbox)
        return;
    lock_guard<Mutex> guard(m_lock);
    m_by_pid.erase(a_mbox->self());
    if (!a_mbox->name().empty())
        m_by_name.erase(a_mbox->name());
    a_mbox->name("");
}
bool basic_otp_mailbox_registry<Alloc, Mutex>::add(const atom& a_name, mailbox_ptr a_mbox)
{
    if (a_name.empty())
        throw err_bad_argument("Empty registering name!");
    if (!a_mbox->name().empty())
        throw err_bad_argument("Mailbox already registered as", a_mbox->name());
    lock_guard<Mutex> guard(m_lock);
    if (m_by_name.find(a_name) != m_by_name.end())
        return false;
    m_by_name.insert(std::pair<atom, mailbox_ptr>(a_name, a_mbox));
    a_mbox->name(a_name);
    return true;
}
示例#3
0
void actual_node::remove(mailbox_ptr mailbox)
{
  remove(mailbox->self(), mailbox->name());
}