libuv读取回调uv_buf_t清理

时间:2017-06-30 23:30:35

标签: c libuv

libuv读取完成回调的签名是:

void (*uv_read_cb)(uv_stream_t* stream, ssize_t nread, const uv_buf_t* buf)

我从文档中了解到,我的回调负责释放所提供的uv_buf_t*的基本成员。我的问题是 - 谁负责释放buf指向的内存?

1 个答案:

答案 0 :(得分:1)

考虑内部函数uv__read。这是您调用回调的地方(预留uv__stream_eof对此Q / A不太感兴趣)。
正如您在函数的the very first line所看到的那样,缓冲区被声明并定义为局部变量:

uv_buf_t buf;

如果你浏览整个函数,你可以看到带有uv_buf_init的缓冲区is used,然后传递给你的回调(参见herehere,{如果您需要更多详细信息,请{3}},hereherehere。 所以,回到问题:

  

谁负责释放buf指向的内存?

既不是你也不是libuv。当超出范围时,缓冲区将自动释放。您无需关心并且文档清晰明了:您自己负责base数据成员。