- 论坛徽章:
- 1
|
本帖最后由 jd808 于 2015-01-08 18:24 编辑
- 读aa===1147 //这个下面就是evbuffer_get_length(m_ReadBuf);这个,有libevent提供,读取缓存长度.卡在这个函数了
- close event. fd:1147, Bev:0x96bb10, conn:0x96d910 ==140737354020672
- ============准备关闭句柄==============1===fd:1147
复制代码 这里有个奇怪的地方是,读线程在准备读取长度的时候卡主了(libevent里应该有吧锁),但这个时候主线程抛出了这个fd断开了,就调用关闭程序取关闭fd和缓存.由于读线程加了conn->UserCMDLock锁(保证每个句柄只能一个线程在读),为了保证在读取过程中,不关闭FD,我就在关闭函数里又加了conn->UserCMDLock锁,结果就卡主了.(关闭函数只会在主线程调用,不会和读线程冲突,这里卡主主要是读线程被卡在了evbuffer_get_length处,导致读线程不能释放锁.),请问这种情况是BUG?还是我用的不对啊.
我的结构是,主线程初始化libevent和fd接入,以及读取消息通知,工作线程通过主线程的管道,接收fd通知,在通过fd取读取消息(读取过程由libevent提供的缓存自动完成,我只读取缓存里面的消息) |
|