0

我有一个核心转储文件,其中pthread_mutex_destroy()返回了错误,可能是因为在pthread_mutex_t数据结构中该__nusers字段设置为 4294967295 (0xFFFFFFFF)。以下是完整值:

mMutex = {
    __data = {
        __lock = 0,
        __count = 0,
        __owner = 0,
        __nusers = 4294967295,
        __kind = 1,
        __spins = 0,
        __elision = 0,
        __list = {
            __prev = 0x0,
            __next = 0x0
        }
    },
    __size = '\000' <repeats 12 times>, "\377\377\377\377\001", '\000' <repeats 22 times>,
    __align = 0
}

这是一个递归互斥锁。该代码在 RHEL 8 系统上运行。

因此,乍一看,这看起来像是__nusers以某种方式经常减少一次。但我不明白这是怎么发生的——pthread_mutex_unlock()在没有锁定的情况下调用首先将__nusers计数保留为 0(它返回EPERM,但递归互斥体不应该涉及任何未定义的行为)。

在什么情况下会__nusers变成本质上的“消极”?

4

0 回答 0