3.3.2 WebSocket.cpp: ERR: internal signal handler caught signal 11

3.3.2上我遇到这个问题,websocket会莫名其妙的断开连接,并且无法重新连上,只能kill进程后才能重新连上,而且这个是在特殊机型上才会有的···以前我误以为是11系统下都会,后来排查不是。

通过logcat查看,每当出现断网问题时就会一直疯狂输出Log->WebSocket.cpp: ERR: internal signal handler caught signal 11,(PS:不是输出的Error是Log输出的)

怀疑是跟CPU有关系或者是和内存泄露有关系,目前我采用了比较极端的方式直接拦截错误,并忽略掉。
在cpp文件中添加一个方法:
//信号处理函数
void recvSignal(int sig)
{
LOGD(“received signal do not deal %d !!!\n”, sig);
}
在连接成功的回调方法中添加拦截代码:
WebSocketImpl::onConnectionOpened()中添加signal(SIGSEGV, recvSignal);

这个只是能解决websocket不会掉线了,但是并没有处理掉引擎的错误,所以还需要引擎组好好去排查一下这个问题···

对了我这边测试的会出问题的机型有:红米K30s, 小米11,红米K40,oppo Renoz
然后我测试复现问题的方式就是快速的发送消息,很快不到1分钟就能在这几种机型上复现了。

@jare 麻烦安排人排查一下吧···

方便给个demo来排查看看?

关注,一样在用3.3.2,websocket
发现websocket在close的时候,ts传递的2个参数close(code, reason)
到c++那边就说我的code不是number。
奇怪了,直接close不传参完事。

为了搞个原生,每天逛论坛时间半小时-1小时,踩坑,脱坑

demo不好弄···我们是2.4.6的项目升级到3.3.2才发现这个问题的···之前2.4.6没问题,而且这个问题是出现在特定机型上,不是所有手机都能出现···

这边使用小米11 没复现。

你需要频繁一点给服务端发送消息···才会出这个问题···不是说连上等着就能出现···

同遇到次问题,有解决吗?

我写了一个临时解决网络的问题只是绕开了没有根本解决信道的问题但是websocket能正常使用

感谢,我试了,还是会循环报那行LOGD,卡死 :sweat_smile:

我这边不会卡死啊···你可以把LOG那句去掉···

就算去掉,还是卡死的,会不断调这函数,不过我试着socket做合包发送和时间限制了

你看看你那个是不是出BUG卡死了,我spine 内存出问题宕机的时候也会出这个log


这个还是会崩溃。

3.4.2循环报错 internal signal handler caught signal 11 前的日志,在三星G21机型复现概率很高
D/WebSocket.cpp: WebSocket (0x75e00c9e90) Unhandled websocket event: 50
D/WebSocket.cpp: WebSocket (0x75e00c9e90) Unhandled websocket event: 33
D/WebSocket.cpp: WebSocket (0x75e00c9e90) Unhandled websocket event: 4
D/WebSocket.cpp: WebSocket (0x75e00c9e90) onConnectionClosed, state: 1 …
D/WebSocket.cpp: onConnectionClosed, WebSocket (0x75e00c9e90) is closing by server.
D/WebSocket.cpp: WebSocket (0x75e00c9e90) onConnectionClosed DONE!

试试打印堆栈,看是哪里报的错