错误 #2011
2.1.15p_pre1_T2版本,大上行子帧配比,10ue长跑稳定性测试,约38h,cu出现挂死
0%
描述
该问题cu已初步定位,提单跟踪
历史记录
由 杨 杨乐 更新于 大约一年 之前
【现象】
运行过程中崩溃
【原因】
使用ue_conn_mgr类的函数:get_ue_conn,获取ue_conn对象,导致崩溃;原因:使用了两个容器ue_conn_list和ue_conn_ptr_list来参与,小概率的不同步出现了崩溃
1.ue_conn对象保存在:ue_conn_ptr_list中,该对象的类型为:std::map<gnb::gnb_ue_id_t, std::shared_ptr<gnb::ue_conn_ptr>>
2.key为ue_id,value为ue_conn_ptr的共享指针。类ue_conn_ptr中保存了ue_conn的指针对象;
3.在函数get_ue_conn中判断UE_ID时,使用ue_conn_list容器判断是否存在,应该使用容器ue_conn_ptr_list来判断;备注:会有一个问题:函数del_ue_conn删除对象时,ue_conn_list的删除比ue_conn_ptr_list要晚,现象:ue_conn_list判断UE_ID时存在,但是ue_conn_ptr_list已经不存在该ue_conn_ptr对象了
4.没有判断value中的指针是否为空。所以如下代码调用时崩溃了:
ue_conn_ptr* ptr = ue_conn_ptr_list[gnb_ue_id].get();
return ptr->get_ue_conn();
【解决方法】
修改代码为如下的方式:
1.使用ue_conn_ptr_list来查找对象,如下代码示:
auto iterator = ue_conn_ptr_list.find(gnb_ue_id);
2.使用前要对value判空,如下代码示:
ue_conn_ptr* ptr = ue_conn_ptr_list[gnb_ue_id].get();
return ((ptr == nullptr) ? nullptr : ptr->get_ue_conn());
【下一步计划】
多启动基站长跑几次,观察是否还有问题,如果没有问题就可以关单了