微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > 发现Z-Stack Home 1.2.1的MT.c文件似乎存在一处bug

发现Z-Stack Home 1.2.1的MT.c文件似乎存在一处bug

时间:10-02 整理:3721RD 点击:

协议栈版本:Z-Stack Home 1.2.1

MT.c文件 -> MT_BuildEndpointDesc函数中,有这样一段代码:

if ( ret == ZMemError )

{

    if (epDesc->simpleDesc->pAppInClusterList)           {    osal_mem_free(epDesc->simpleDesc->pAppInClusterList);         }

    if (epDesc->simpleDesc->AppNumOutClusters)      {     osal_mem_free(epDesc->simpleDesc->pAppOutClusterList);         }

    osal_mem_free(epDesc->simpleDesc);

}

红字注明部分,似乎应该改成:pAppOutClusterList。

应该也可以的,因为epDesc->simpleDesc->AppNumOutClusters非零说明epDesc->simpleDesc->pAppOutClusterList非空。

不对,按程序的思路,执行过程应该是这样的:

1、判断epDesc->simpleDesc->AppNumInClusters是否非零,若非零,则分配内存epDesc->simpleDesc->pAppInClusterList用来存储InClusterList。

2、判断epDesc->simpleDesc->AppNumOutClusters是否非零,若非零,则分配内存epDesc->simpleDesc->pAppOutClusterList用来存储OutClusterList。

3、之后会判断上面是否顺利执行,若有某一步执行错误,需将之前分配成功的内存释放。

例如epDesc->simpleDesc->AppNumInClusters非零且epDesc->simpleDesc->pAppInClusterList分配成功,epDesc->simpleDesc->AppNumOutClusters非零且epDesc->simpleDesc->pAppOutClusterList分配失败,

此时会释放epDesc->simpleDesc->pAppInClusterList,而对epDesc->simpleDesc->pAppOutClusterList则不应该执行释放(因为它没有分配成功)。

但按我指出的bug,此时仍会对epDesc->simpleDesc->pAppOutClusterList执行释放,即对一个指向0000H的指针执行了osal_mem_free。

 

 

能否确认一下

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top