-
Notifications
You must be signed in to change notification settings - Fork 655
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
RpcClientImpl 在调用stop的时候hung死 #99
Comments
停的时候stream_map的值为3这个有关系吗 |
还发现一个现象 hang在了epoll_wait上, |
@baimushan 你把使用的方法和场景说一下,我尝试本地复现 |
server 不停的启动停止,退出前我们会stop rpclient实例, 就会遇到这样的case。 |
根据你描述的场景,没有复现出hang住的情况,能否留一下邮箱或其他联系方式方便沟通。 |
我的qq 406455861 |
@baimushan ,近期在我们的环境复现了你说的问题,修复代码已经merge到master分支,请知晓,谢谢! |
栈状态
#0 0x00007f1834e7b22d in pthread_join () from /lib64/libpthread.so.0
#1 0x00000000006215ab in sofa::pbrpc::ThreadGroupImpl::stop (this=0x228f6b0) at src/sofa/pbrpc/thread_group_impl.h:182
#2 0x00000000006176c7 in sofa::pbrpc::RpcClientImpl::Stop (this=0x22be000) at src/sofa/pbrpc/rpc_client_impl.cc:109
查看io_service的内存信息如下
(gdb) p *(boost::asio::detail::task_io_service * const) 0x22738e0
$26 = {boost::asio::detail::service_baseboost::asio::detail::task_io_service = {boost::asio::io_service::service = {boost::noncopyable_::noncopyable = {},
vptr.service = 0xa24a90 <vtable for boost::asio::detail::task_io_service+16>, key = {type_info_ = 0xa245a0 <typeinfo for boost::asio::detail::typeid_wrapperboost::asio::detail::task_io_service>,
id_ = 0x0}, owner_ = @0x228f6d0, next_ = 0x0}, static id = {boost::asio::io_service::id = {boost::noncopyable_::noncopyable = {}, }, }},
one_thread_ = false, mutex_ = {boost::noncopyable_::noncopyable = {}, mutex_ = {__data = {__lock = 0, __count = 0, __owner = 0, _nusers = 7, kind = 0, spins = 0, list = {
prev = 0x0, next = 0x0}}, size = '\000' <repeats 12 times>, "\a", '\000' <repeats 26 times>, align = 0}}, task = 0x2266e10,
task_operation = {boost::asio::detail::task_io_service_operation = {next = 0x0, func = 0x0, task_result = 0}, }, task_interrupted = false, outstanding_work = {value = 3},
op_queue = {boost::noncopyable::noncopyable = {}, front = 0x0, back = 0x0}, stopped = false, shutdown = false, first_idle_thread = 0x7f182991fce0}
我理解调用后stop函数后task_io_service 的 outstanding_work_变量会被减为0 并退出他的run函数。
从而使得pthread_join函数成功返回。可能的问题点在哪里呢?
The text was updated successfully, but these errors were encountered: