Chinaunix首页 | 论坛 | 博客
  • 博客访问: 21675
  • 博文数量: 9
  • 博客积分: 226
  • 博客等级: 二等列兵
  • 技术积分: 105
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-07 16:24
文章分类
文章存档

2012年(9)

我的朋友

分类: BSD

2012-03-11 19:18:57

今天遇到一个倒霉问题,调试了许久
 

点击(此处)折叠或打开

  1. int func(..., uint16_t link_id)
  2. {
  3.     ha_unit_t *ha_unit;

  4.     TAILQ_FOREACH(link, &ha_unit->sec_netlink, next_link) {
  5.        if (link->id == link_id) {
  6.            TAILQ_REMOVE(&ha_unit->sec_netlink, link, next_link);
  7.            FREE(link, M_HA_CONFIG);
  8.        }
  9.     }
  10. }

运行到这个函数时kernel总是panic, 反复检查还是不得其解,后来发现是因为
ha_unit中的id是uint32_t类型, 而形参中得link_id是uint16_t类型
 
在if (link->id == link_id)这句中导致
FREE(link, M_HA_CONFIG)发生了错误, 进而panic
 
悲催的问题。。。。。
阅读(355) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~