1

当我阅读 tty_io.c 时,我看到了这个定义。这个 __releases() 是什么意思?

void tty_write_unlock(struct tty_struct *tty)
    __releases(&tty->atomic_write_lock)
{
    mutex_unlock(&tty->atomic_write_lock);
    wake_up_interruptible_poll(&tty->write_wait, POLLOUT);
}
4

3 回答 3

2

显然 __releases,并且__acquires是在 Linux 的 compiler.h 头文件中定义的两个宏,它们与Sparse静态检查器一起用于计算释放和获取的锁(以确保它们是平衡的)。

于 2013-09-05T11:51:06.850 回答
0

它是一个预处理器宏,最终生成附加到函数的一些属性,以提供编译器或其他工具的详细信息。

这是 linux 内核的compiler.h中的定义(这显然是您正在查看的内容):

# define __releases(x)  __attribute__((context(x,1,0)))

ifdef __CHECKER__根据this wikipedia page ,它在其中意味着它被静态分析器“Sparse”使用。

于 2013-09-05T11:46:34.327 回答
0

Sparse使用的预处理器宏

Sparse 是一种计算机软件工具,旨在发现 Linux 内核中可能存在的编码错误

如果您查看 wiki 页面,您会看到 linux 的头文件中的某处__releases__attribute__GCC 扩展取代。

于 2013-09-05T11:50:49.723 回答