修改换库后出现的崩溃问题,编译脚本修改,进程控制脚本添加调试

This commit is contained in:
lnk
2026-06-17 16:20:13 +08:00
parent 0b8a6739f6
commit 5e933b6729
7 changed files with 187 additions and 53 deletions

View File

@@ -197,14 +197,32 @@ void closeChannel(chnl_usr_t *chnl_usr)
ALL_RCB_INFO *all_rcb_info;
RCB_INFO *rcb_info;
ST_RET ret;
if(chnl_usr->net_info->user_info)
{
//lnk20260617防止复用崩溃
/*if(chnl_usr->net_info->user_info)
{
all_rcb_info = (ALL_RCB_INFO *)chnl_usr->net_info->user_info;
all_rcb_info = chnl_usr->all_rcb_info;
while((rcb_info = (RCB_INFO *)list_get_first(&all_rcb_info->rcb_info_list)) != NULL)
rcb_info_destroy (rcb_info);
chk_free(all_rcb_info);
chnl_usr->net_info->user_info=NULL;
}*/
if (chnl_usr->all_rcb_info)
{
all_rcb_info = chnl_usr->all_rcb_info;
while ((rcb_info = (RCB_INFO *)list_get_first(&all_rcb_info->rcb_info_list)) != NULL) {
rcb_info_destroy(rcb_info);
}
chk_free(all_rcb_info);
chnl_usr->all_rcb_info = NULL;
}
chnl_usr->net_info->user_info = NULL;
//lnk20260617防止复用崩溃
chnl_usr->net_info->rem_vmd = NULL;
echo_warn("---------start disconnectFromServer!\n");
ret = mms_disconnectFromServer(chnl_usr->net_info,&chnl_usr->m_reqCtrl);
@@ -219,6 +237,9 @@ void closeChannel(chnl_usr_t *chnl_usr)
mvl_free_req_ctrl(chnl_usr->m_reqCtrl);
//lnk20260617防止复用崩溃
chnl_usr->all_rcb_info = NULL;
chnl_usr->net_info->user_info = NULL;
chnl_usr->net_info = NULL;
@@ -1729,7 +1750,9 @@ void CheckNextNotConnectedChannel()
echo_warn("chnl_usr->net_info->user_info is not NULL\n");
}
chnl_usr->net_info->user_info = all_rcb_info;
//lnk20260617防止复用崩溃
//chnl_usr->net_info->user_info = all_rcb_info;
chnl_usr->chnl->ied->status = STATUS_NORMAL;
chnl_usr->chnl->status = STATUS_NORMAL;

View File

@@ -1228,8 +1228,30 @@ ST_VOID u_iec_rpt_ind_data(MVL_VAR_ASSOC** info_va,
log_var_data(info_va[va_num], &mms_dec_data);
//assert(add_mms_dec_data== (uint32_t)&mms_dec_data);
rptinfo = find_rptinfo_from_net_rcb_info(net_info, rcb_info);
if (rptinfo == NULL) {
chnl_usr_t* chnl_usr_tmp = net_info ? (chnl_usr_t*)net_info->user_info : NULL;
printf("[RPT][ERROR] cannot find rptinfo, net_info=%p user_info=%p rcb_info=%p RptID=%s\n",
(void*)net_info,
net_info ? (void*)net_info->user_info : NULL,
(void*)rcb_info,
(rcb_info && rcb_info->RptID) ? rcb_info->RptID : "NULL");
return;
}
//rptinfo->m_LastDataTime = sGetMsTime();//WW 2023-08-29 去除
LD_info = rptinfo->LD_info;
if (LD_info == NULL) {
printf("[RPT][ERROR] rptinfo->LD_info NULL, rptinfo=%p RptID=%s\n",
(void*)rptinfo,
(rcb_info && rcb_info->RptID) ? rcb_info->RptID : "NULL");
return;
}
chnl_usr = net_info->user_info;
ied = chnl_usr->chnl->ied;
@@ -2009,7 +2031,13 @@ ST_RET u_iec_rpt_ind(MVL_COMM_EVENT* event)
}
/* Get "all_rcb_info" from "user_info". User must set "user_info" when conn established.*/
all_rcb_info = (ALL_RCB_INFO*)event->net_info->user_info;
//lnk20260617防止复用崩溃
//all_rcb_info = (ALL_RCB_INFO*)event->net_info->user_info;
chnl_usr_t *chnl_usr = (chnl_usr_t*)event->net_info->user_info;
if (chnl_usr == NULL || chnl_usr->all_rcb_info == NULL) {
return;
}
all_rcb_info = chnl_usr->all_rcb_info;
/* Check "all_rcb_info" to see if any RCB has been enabled. */
if (all_rcb_info == NULL || all_rcb_info->rcb_info_list == NULL)

View File

@@ -860,8 +860,24 @@ ST_UCHAR TrgOps [1]; /* 8 bit bitstring */
if(ret == SD_SUCCESS)
{
list_add_last(&((ALL_RCB_INFO *)clientNetInfo->user_info)->rcb_info_list, rcb_info); /* add RCB to list*/
}
//lnk20260617防止复用崩溃
//list_add_last(&((ALL_RCB_INFO *)clientNetInfo->user_info)->rcb_info_list, rcb_info); /* add RCB to list*/
chnl_usr_t *chnl_usr = (chnl_usr_t *)clientNetInfo->user_info;
if (chnl_usr == NULL || chnl_usr->all_rcb_info == NULL) {
printf("[RPT_REGISTER][ERROR] invalid user_info=%p all_rcb_info=%p dom=%s rcb=%s\n",
clientNetInfo ? clientNetInfo->user_info : NULL,
chnl_usr ? chnl_usr->all_rcb_info : NULL,
dom_name ? dom_name : "NULL",
rcb_name ? rcb_name : "NULL");
rcb_info_destroy(rcb_info);
rcb_info = NULL;
return NULL;
}
list_add_last(&chnl_usr->all_rcb_info->rcb_info_list, rcb_info);
}
else{
rcb_info_destroy(rcb_info);
rcb_info = NULL;

View File

@@ -375,6 +375,8 @@ struct chnl_usr_t{
double m_ClosedMsTime; //上次通道关闭时间
double m_LastPosRespTime; //上次肯定响应的时间
int m_NegRespTimes; // 累计否定响应次数
ALL_RCB_INFO *all_rcb_info;//lnk20260617防止复用崩溃
};

View File

@@ -232,9 +232,20 @@ rptinfo_t* find_rptinfo_from_net_rcb_info(MVL_NET_INFO *net_info,RCB_INFO *rcb_i
rptinfo_t *rptinfo = NULL;
int cpuno,rpt_no;
chnl_usr = net_info->user_info;
if (net_info == NULL || rcb_info == NULL) {
return NULL;
}
chnl_usr = (chnl_usr_t*)net_info->user_info;
if (chnl_usr == NULL || chnl_usr->chnl == NULL || chnl_usr->chnl->ied == NULL) {
return NULL;
}
ied = chnl_usr->chnl->ied;
ied_usr = GET_IEDEXT_ADDR(ied);
if (ied_usr == NULL || ied_usr->LD_info == NULL) {
return NULL;
}
for(cpuno=0 ; cpuno<ied->cpucount; cpuno++) {
LD_info = &(ied_usr->LD_info[cpuno]);