ISender* CManagedSenderTable::open_sender(const SenderInfo& sender_info) { if (!check_sender_info(sender_info)) { return NULL; } CManagedSender* sender = NULL; sys::LockHelper<sys::CLock> lock(_lock_array[sender_info.key]); if (NULL == _sender_table[sender_info.key]) { sender = new CManagedSender(sender_info); sender->inc_refcount(); sender->set_in_table(true); sender->attach_sender_table(this); sender_info.reply_handler->attach(sender); _sender_table[sender_info.key] = sender; get_context()->add_sender(sender); } return sender; }
ISender* CUnmanagedSenderTable::open_sender(const SenderInfo& sender_info) { if (!check_sender_info(sender_info)) { return NULL; } sys::LockHelper<sys::CLock> lock(_lock); std::pair<SenderMap::iterator, bool> retval; CUnmanagedSender* sender = new CUnmanagedSender(sender_info); retval = _sender_map.insert(std::make_pair(sender_info.ip_node, sender)); if (!retval.second) { delete sender; sender = NULL; } else { sender->inc_refcount(); sender->set_in_table(true); sender->attach_sender_table(this); sender_info.reply_handler->attach(sender); get_context()->add_sender(sender); } return sender; }