c语言 - 在这种情况下"pinned"是什么意思?



当我读取libevent的源代码时,我看到了这个评论,但我不明白"被钉住"的意思?

    /* Make sure that none of the chains we need to copy from is pinned. */
remaining = size - chain->off;
EVUTIL_ASSERT(remaining >= 0);
for (tmp=chain->next; tmp; tmp=tmp->next) {
    if (CHAIN_PINNED(tmp))
        goto done;
    if (tmp->off >= (size_t)remaining)
        break;
    remaining -= tmp->off;
}

你能给我解释一下吗?

在这种情况下固定只是意味着evbuffer_chain当前正在用于读取或写入。通过查看CHAIN_PINNED的定义以及EVBUFFER_MEM_PINNED_ANYEVBUFFER_MEM_PINNED_W和"EVBUFFER_MEM_PINNED_R"的定义,您会发现它正在检查evenbuffer_chain的标志,以确定其是否用于读取或写入,如下所示:

buffer.c:

#define CHAIN_PINNED(ch)  (((ch)->flags & EVBUFFER_MEM_PINNED_ANY) != 0)

evbuffer internal.h:

#define EVBUFFER_MEM_PINNED_R   0x0010
#define EVBUFFER_MEM_PINNED_W   0x0020
#define EVBUFFER_MEM_PINNED_ANY (EVBUFFER_MEM_PINNED_R|EVBUFFER_MEM_PINNED_W)

您可以进一步看到这些标志何时在代码中设置,比如在这里的源代码中进行写入,在这里的代码中进行读取。

相关内容

  • 没有找到相关文章

最新更新