in nlsCppSdk/transport/nodeManager.cpp [51:118]
int NlsNodeManager::addRequestIntoInfoWithInstance(void* request,
void* instance) {
MUTEX_LOCK(_mtxNodeManager);
if (instance == NULL) {
LOG_ERROR("instance is nullptr.");
MUTEX_UNLOCK(_mtxNodeManager);
return -(EventClientEmpty);
}
if (request == NULL) {
LOG_ERROR("request is nullptr.");
MUTEX_UNLOCK(_mtxNodeManager);
return -(RequestEmpty);
}
INlsRequest* nls_request = static_cast<INlsRequest*>(request);
ConnectNode* node = static_cast<ConnectNode*>(nls_request->getConnectNode());
if (node == NULL) {
LOG_ERROR("node is nullptr.");
MUTEX_UNLOCK(_mtxNodeManager);
return -(NodeEmpty);
}
std::map<void*, NodeInfo>::iterator iter;
iter = this->_infoByRequest.find(request);
if (iter != this->_infoByRequest.end()) {
NodeInfo& info = iter->second;
LOG_WARN("request:%p has added in NodeInfo, status:%s node:%p", request,
this->getNodeStatusString(info.status).c_str(), info.node);
if (info.status > NodeStatusCreated && info.status < NodeStatusReleased) {
LOG_ERROR("request:%p is conflicted in NodeInfo, status:%s node:%p",
info.request, this->getNodeStatusString(info.status).c_str(),
info.node);
MUTEX_UNLOCK(_mtxNodeManager);
return -(InvalidRequest);
} else {
if (info.instance != instance) {
LOG_ERROR("the request:%p of instance(%p) isnot in instance(%p)",
info.request, instance, info.instance);
MUTEX_UNLOCK(_mtxNodeManager);
return -(InvalidRequest);
}
LOG_WARN("request:%p cover old request in NodeInfo, status:%s node:%p",
info.request, this->getNodeStatusString(info.status).c_str(),
info.node);
info.request = request;
info.node = node;
info.instance = instance;
info.uuid = node->getNodeUUID();
info.status = NodeStatusCreated;
this->_requestListByNode[node] = request;
}
} else {
NodeInfo info;
info.request = request;
info.node = node;
info.instance = instance;
info.uuid = node->getNodeUUID();
info.status = NodeStatusCreated;
this->_infoByRequest.insert(std::make_pair(request, info));
this->_requestListByNode.insert(std::make_pair(node, request));
LOG_DEBUG("add request(%p) node(%p) into NodeInfo", request, node);
}
MUTEX_UNLOCK(_mtxNodeManager);
return Success;
}