hello-Li-sir
hello-Li-sir
没用,return 0之前加过死循环,IO线程没结束也会崩 ------------------ 原始邮件 ------------------ 发件人: "ithewei/libhv" ***@***.***>; 发送时间: 2025年4月1日(星期二) 下午3:44 ***@***.***>; ***@***.******@***.***>; 主题: Re: [ithewei/libhv] 多个TcpClient/UdpClient共用一个EventLoop,析构时有概率崩溃 (Issue #704) 退出线程时应该等待IO线程结束,return 0前,加一个loopThread.stop();试试 — Reply to this email directly, view it on GitHub, or unsubscribe. You...
用的最新版本 还是有这个问题 window平台 ------------------ 原始邮件 ------------------ 发件人: "ithewei/libhv" ***@***.***>; 发送时间: 2025年4月1日(星期二) 下午3:54 ***@***.***>; ***@***.******@***.***>; 主题: Re: [ithewei/libhv] 多个TcpClient/UdpClient共用一个EventLoop,析构时有概率崩溃 (Issue #704) 最新master分支上有个修复,看看带上没41c63bf — Reply to this email directly, view it on GitHub, or unsubscribe. You...
这个跟你分析的原因还不一样,我测试的时候执行完startRecv还是会崩。本身发现的这个问题时候Tcp就已经建立了连接,使用外部loop析构的时候大概率会崩。后面用Udp试了一下,也有这个问题。winodows上出现了,linux上跑了几遍没复现。库是直接用vs studio+源码的cmake编译的。 ------------------ 原始邮件 ------------------ 发件人: ***@***.***>; 发送时间: 2025年4月2日(星期三) 凌晨5:11 收件人: ***@***.***>; 抄送: ***@***.***>; ***@***.***>; 主题: Re: [ithewei/libhv] 多个TcpClient/UdpClient共用一个EventLoop,析构时有概率崩溃 (Issue #704) 原因是执行启动的时候 loop_->runInLoop(std::bind(&UdpClientEventLoopTmpl::startRecv, this)); 这个是投递启动事件到loop线程异步触发启动,而startRecv还没来得及执行你的UdpClient对象就析构了,导致后续startRecv启动后使用的this指针父类Channel相关内存数据全部无效从而崩溃。 而不使用外部loop时不存在此现象是因为is_loop_owner=true的内部线程stop时会执行终止线程。 要解决这个问题就必须作者想个好办法优化stop逻辑,我发现许多cpp封装对象涉及异步事件执行的地方都可能因this对象析构从而产生崩溃潜在问题,临时解决方案就是调用start之后检测hio的事件是否不等于0来判断异步触发启动完成可以执行后续停止或析构,我在你的代码示例基础增加 while (hio_events(client1.channel->io()) == 0) std::this_thread::yield();...