Closed lanytcc closed 1 year ago
@maye174 您好,我今天在使用直播弹幕的功能的时候遇到了程序闪退的问题。
看debug内容,是因为 DNS timeout 导致的 mongoose 报错退出,在 LiveDanmaku::disconnect() 的 mongoose_thread.join(); 出现了错误。
我最近有更新 mongoose 库,不过只是和主分支同步了一下,应该不是这个导致的问题,同时我也试了之前的版本同样存在这个问题。
有两个小问题:
我最近在做跨平台支持的部分,暂时还没有太多时间研究这个问题,如果您有时间看一看的话是非常感谢滴~
@xfangfang 我在win上测试你说的dns超时没遇到,第二个问题我也摸不着头脑,唯一的可能就是mongoose_thread提前中止了,你试一下这个链接🔗
@maye174 很遗憾,和之前一样,直播打开后过一两秒的样子,软件就闪退掉。
@xfangfang
确定是 LiveDanmaku 的问题,注释掉就不会闪退了。 我正在使用的是 macOS,如果断网加载也有相似的问题出现。
能看到是 mongoose_event_handler 遇到了 ev == MG_EV_ERROR,然后调用的 liveDanmaku->disconnect(); 在其内报错的。
我今晚先研究一下这个看看吧,你那边没办法复现确实不太好琢磨这个问题。
刚刚看了一下,为什么在我这边 dns timeout 我还不是很清楚,但是这个应该和我电脑相关,不是一个大问题。(尝试修改了 dns timeout的时间和服务器地址都没有效果,这个我再持续研究看看)
报错闪退的原因找到了,我感觉可以直接把 mongoose_thread.join(); 删掉来解决。
原因是在 mongoose 线程里更新事件 -> 发生错误 -> mongoose_event_handler 进入 MG_EV_ERROR 分支 -> 调用 liveDanmaku->disconnect() -> 调用 mongoose_thread.join();
就导致了 一个线程自己调用 join 的问题。
@xfangfang 那应该修改mongoose_event_handler即可,我昨晚在win上也复现了断网闪退的问题,但是通常会坚持更长时间触发,以至于我第一次尝试没发现。 我待会会测试新代码是否起作用,等我的好消息