1
一个比较隐蔽的死锁bug
在测试代码的过程中,发现有大概百分之一的概率会出现一个死锁bug。进过仔细检查,发现加锁,解锁的地方是没有问题的。实在找不到问题的原因了,一狠心在每次加锁和解锁之后,将rwlock_t中的lock值打印出来。 每次write_unlock之后,那个值本应该是0的,但在出现问题的时候,发现那个值一个乱码。于是怀疑是锁占的那块内存被写掉了(内存越界)。后来调试发现, 由于在结构体中 rwlock_t 是放在最后的位置上的,它前面还有个字符数组,由于往字符数组里写东西的时候,没有强制长度(写的随机数)。因此发生由于内存越界导致的死锁。
2
内核栈溢出引起的bug
现象:
在内核schedule函数里面发生panic,提示schedule处于原子上下文中(in_atomic()为1 ,即当前thread_info的preempt_count不为0)。进过加log调试发现,preempt_count是突然变成一个很大的数的。
这种现象比较容易重复,提示的panic信息也相同。
猜测:
是内核栈溢出。 因为内核栈和thread_info共用8k的内存,因为内