Closed DD-L closed 8 years ago
此问题大概是 socket 在另外一个线程中被执行了 close ,而且 socket 所在的 session 对象被整体析构掉了,所以才会导致
219 if (descriptor_data->shutdown_)
(gdb) p descriptor_data
$1 = (boost::asio::detail::epoll_reactor::per_descriptor_data &) @0x17fdc58: 0x0
解决办法是,将 socket 的 close, 放到 session 析构函数里执行, 即可保证 close 只会被执行一次,而无需关心多线程。此外 添加 socket.cancel 是个好帮手,它可以立即取消未完成的异步。
此 bug 在 即将发布的 v0.2.0
版本中被彻底修复。
相关链接: https://svn.boost.org/trac/boost/ticket/7611
程度:致命 频率:偶现 临时解决方案:带
-k
或--keep-running
参数的启动程序