gaojl0728 发表于 2014-08-18 11:21

回复 4# Godbach


    不好意思坑了你哈,dst_release没有bug,不存在竞争条件, 根源是我错误的理解了atomic_dec_return, 详情看我10楼的分析。

gaojl0728 发表于 2014-08-18 11:23

回复 5# mnipxh


    恩,应该是这个原因,但是因为一开始我就认准了是atomic_dec_return导致的问题,导致我判断错误,没有进一步分析根源。

gaojl0728 发表于 2014-08-18 11:24

回复 8# smalloc


    恩,只要等于0的路径执行过就行了, 后面有没有负数没什么问题。

gaojl0728 发表于 2014-08-18 11:26

回复 9# amarant


    谢谢支持, 其实我这个贴就是个反面教材哈哈, 没有深入的调查研究就上来发帖, 实在是不好意思。

gaojl0728 发表于 2014-08-18 11:30

atomic_dec_return其实就是文如起名, 它能够保证“递减和返回”整体是一个原子操作,

如果把:
newrefcnt = atomic_dec_return(&dst->__refcnt);
换成:
atomic_dec(&dst->__refcnt);
newrefcnt = dst->__refcnt;

就会存在我说的那个竞争条件了
页: 1 [2]
查看完整版本: 又发现一个Linux Kernel的Bug