diff --git a/server/masterserver/svrmgr.cc b/server/masterserver/svrmgr.cc index 7f3646d..1005366 100644 --- a/server/masterserver/svrmgr.cc +++ b/server/masterserver/svrmgr.cc @@ -253,19 +253,26 @@ SvrNode* SvrMgr::GetNodeBySocket(int socket_handle) return itr != socket_hash_.end() ? itr->second : nullptr; } -void SvrMgr::RemoveNode(SvrNode* node) +void SvrMgr::RemoveNode(SvrNode* svr_node) { { for (size_t i = 0; i < node_sorted_list_.size(); ++i) { - if (node_sorted_list_[i] == node) { + if (node_sorted_list_[i] == svr_node) { node_sorted_list_.erase(node_sorted_list_.begin() + i); break; } } } { - node_key_hash_.erase(node->key); - socket_hash_.erase(node->socket_handle); + struct Friend *node, *tmp; + list_for_each_entry_safe(node, tmp, &svr_node->human_list, human_entry) { + list_del_init(&node->human_entry); + node->svr_node = nullptr; + } } - delete node; + { + node_key_hash_.erase(svr_node->key); + socket_hash_.erase(svr_node->socket_handle); + } + delete svr_node; }