void S1mmeSession::CheckPagingStmsiMap() { uint32_t ssss = 0; S1APNode* p_node = (S1APNode*)(p_stmsi_paging_map_->GetHead()); g_kqi_chk_map_too_long = 0; memset(g_kqi_chk_map_not_empty, 0, sizeof(g_kqi_chk_map_not_empty)); while(1) { if(p_node == NULL) break; KQIMap& kmap = p_node->GetKqiMap(); { uint32_t a = kmap.size(); if (a < kKqiLocMax) { g_kqi_chk_map_not_empty[a]++; } else { g_kqi_chk_map_too_long++; } } for (KQI_Iter iter=kmap.begin(); iter != kmap.end(); ++iter) { S1MMEKQI* p_kqi = iter->second; assert(p_kqi != NULL); g_kn_tmp_map_.erase(p_kqi); } p_node = (S1APNode*)(p_stmsi_paging_map_->Next()); ++ssss; } uint8_t buf[5120] = {0}; uint32_t offset = 0; for (uint32_t i=0; i<kKqiLocMax; ++i) { offset += sprintf((char*)(buf + offset), "[%u]=%lu,", i, g_kqi_chk_map_not_empty[i]); if (offset > 4096) break; } LogInfo("Session status - S1mme: kqi chk paging stmsi map too_length: %lu, others: %s", g_kqi_chk_map_too_long, buf); }什么意思
时间: 2024-03-31 12:36:51 浏览: 117
这段代码是另一个函数,函数名为 `CheckPagingStmsiMap`,与前一个函数 `CheckPagingImsiMap` 类似,也是对数据结构 `p_stmsi_paging_map_` 中数据的检查和统计,并将结果打印输出日志。该函数的实现与 `CheckPagingImsiMap` 函数基本相同,只是遍历的是 `p_stmsi_paging_map_` 中的元素,并且输出的日志中包含了 `g_kqi_chk_map_too_long` 和 `g_kqi_chk_map_not_empty` 两个全局变量的值。
相关问题
void S1mmeSession::CheckPagingImsiMap() { uint32_t ssss = 0; S1APNode* p_node = (S1APNode*)(p_imsi_paging_map_->GetHead()); g_kqi_chk_map_too_long = 0; memset(g_kqi_chk_map_not_empty, 0, sizeof(g_kqi_chk_map_not_empty)); while(1) { if(p_node == NULL) break; KQIMap& kmap = p_node->GetKqiMap(); { uint32_t a = kmap.size(); if (a < kKqiLocMax) { g_kqi_chk_map_not_empty[a]++; } else { g_kqi_chk_map_too_long++; } } for (KQI_Iter iter=kmap.begin(); iter != kmap.end(); ++iter) { S1MMEKQI* p_kqi = iter->second; assert(p_kqi != NULL); g_kn_tmp_map_.erase(p_kqi); } p_node = (S1APNode*)(p_imsi_paging_map_->Next()); ++ssss; } uint8_t buf[5120] = {0}; uint32_t offset = 0; for (uint32_t i=0; i<kKqiLocMax; ++i) { offset += sprintf((char*)(buf + offset), "[%u]=%lu,", i, g_kqi_chk_map_not_empty[i]); if (offset > 4096) break; } LogInfo("Session status - S1mme: kqi chk paging imsi map too_length: %lu, others: %s", g_kqi_chk_map_too_long, buf); }什么意思
这段代码是一个函数,函数名为 `CheckPagingImsiMap`,主要作用是进行一些对 `p_imsi_paging_map_` 中数据的检查和统计,并将结果打印输出日志。具体来说,该函数遍历了 `p_imsi_paging_map_` 中的所有元素,对每个元素中的 `KQIMap` 数据结构进行了一些操作,最后将 `g_kqi_chk_map_too_long` 和 `g_kqi_chk_map_not_empty` 两个全局变量的值记录在日志中输出。其中 `KQIMap` 是一个键值对的映射,键是一个字符串,值是一个指向 `S1MMEKQI` 类型对象的指针。函数中还用到了一些 C++ STL 中的函数和操作,例如 `size()`、`begin()`、`end()`、`erase()` 等。
void S1mmeSession::CheckTimeout(uint64_t second, uint8_t worker_id) { //主map 超时, 同时伴随 辅助map 超时 bool dead_loop_major,dead_loop_hoc,dead_loop_stmsi; { S1APNode* p_cur = (S1APNode*)(p_major_map_->GetHead()); S1APKey_T* p_cur_key = p_major_map_->GetCursorKey(); S1APNode* p_next = (S1APNode*)(p_major_map_->Next()); S1APKey_T* p_next_key = p_major_map_->GetCursorKey(); while (p_next != NULL) { if (current_time_.tv_sec - p_cur->GetLastTime().tv_sec > timeout_major_) { if (handle_session_version_ == S1MME_SESSION_VERSION_CHINA_TELECOM) { CtOutputNode(p_cur,true); } else { CuOutputNode(p_cur,s1mme_worker_id_,true); } p_path_switch_map_->DeleteData(p_cur->GetMMEKey(), p_s1ap_node_allocator_); p_handover_container_map_->DeleteData(p_cur->GetContainerKey(), p_s1ap_node_allocator_); SPUserInfo& sp_user_info = p_cur->GetUserInfo(); //Todo@ydzy:超时stmsi _map p_major_map_->DeleteData(*p_cur_key, p_s1ap_node_allocator_); p_cur = p_next; p_next = (S1APNode*)(p_major_map_->Next()); p_cur_key = p_next_key; p_next_key = p_major_map_->GetCursorKey(); } else { break; } } dead_loop_major = p_major_map_->CheckDeadLoop(); }什么意思
这是一个函数定义,函数名为CheckTimeout,参数列表包括一个uint64_t类型的second和一个uint8_t类型的worker_id。函数的主要作用是检查主map和辅助map是否超时,如果超时则进行相应的操作。其中,p_major_map_是主map,p_path_switch_map_和p_handover_container_map_是辅助map。函数实现的主要逻辑是:遍历主map中的节点,如果某个节点超时,则调用相应的函数进行处理,然后将该节点从所有map中删除。最后,检查主map是否出现死循环。具体的实现细节需要参考其他代码部分。
阅读全文