什么"固定"这个意思是什么意思?

时间:2016-01-14 07:38:31

标签: c libevent

当我阅读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;
}

你可以向我解释一下吗?

1 个答案:

答案 0 :(得分:0)

在这种情况下固定只意味着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)

您可以在here in the source for writinghere in the source for reading等代码中进一步查看这些标记的设置。