0
0

Libevent HTTP 内存泄露

ideawu 发表于 2014年04月12日 12:11 | Hits: 1907
Tag: C/C++语言编程 | 高性能Web架构 | comet | libevent

支持百万并发连接的 comet 推送服务器 icomet 刚刚修复了一个内存泄露的 bug, 这个 bug 是因为不正确地使用 libevent 导致的, 无法用 valgrind 等工具检查出来.

这个 bug 的原因是这样的, 当客户端请求到来时, 服务器端调用了

evhttp_send_reply_start();

表示开始向客户端推送数据(使用 HTTP chunked), 最后当 long-polling 结束时, 应该调用

evhttp_send_reply_end();

来关闭连接, 释放 libevent 的内存. 不过, 如果客户端提前终止了请求, 会导致什么呢? 会导致连接关闭的回调函数被调用, 但是, 在这个回调函数里, 我没有调用evhttp_send_reply_end(), 所以导致了内存泄露.

在使用 libevent 的过程中, 发现 libevent 的坑确实不少, 而且它的文档根本没有对类似的地方做特别说明, 没有说明哪些函数必须配对使用, 如何释放内存等.

Related posts:

  1. Libevent 2 HTTP 客户端示例
  2. 让libevent HTTP服务器立即知道客户端的断开
  3. iComet 0.2.2.1 稳定版发布和Android聊天App示例
  4. HTTP 长连接技术 Comet
  5. 构建C1000K的服务器(2) – 实现百万连接的comet服务器

你现在看的文章是:Libevent HTTP 内存泄露

原文链接: http://www.ideawu.net/blog/archives/798.html

0     0

评价列表(0)