今天几个bug的排查过程

1. event_base_loop 未进入消息循环,自动退出

解决方法:gdb跟踪到退出的代码,然后查看代码,分析为什么退出,发现是因为没有事件,所以退出

2. 如果client做了connect,但是服务器没有accept,则一直触发事件

解决方法:怀疑是没有边缘触发,strace发现用的确实是epoll,找到epoll设置边缘触发的标志位,在libevent代码中搜索此标志位,找到libevent的标志位,设置即可

3. 调用redis的anetRead,总是失败

解决方法:跟踪代码,发现是调用read时返回了-1,man read,发现非阻塞io读不到数据会返回-1,查看redis代码中的anetRead,发现他没用,而是重新写了一个,并且判断errno=-11时,认为不是错误

posted on 2012-05-19 22:20  李玉龙  阅读(225)  评论(0编辑  收藏  举报

导航