它在我的多线程程序中显示:我开始使用Websocket(libwebsockets)连接游戏服务器的大约300个线程,主循环是: 第1步创建websocket的新上下文 步骤2使用websocket连接服务器 setp 3使用函数lws_context_destroy(与服务器断开连接)销毁上下文,然后返回步骤1 一段时间后(连接成功约5k次或更多),我的程序崩溃(100%),堆栈信息列在下面:
#1 0x00007f74a5106bd7 in doall_util_fn (lh=0x7f74781b1a20, use_arg=0, func=0x7f74a508ddc0 <def_cleanup_cb>, func_arg=0, arg=0x0) at lhash.c:294
#2 0x00007f74a508dd7c in int_cleanup () at ex_data.c:382
#3 0x00007f74a65ce76c in lws_context_destroy2 () from /usr/local/lib/libwebsockets.so.10
#4 0x00007f74a65cea74 in lws_context_destroy () from /usr/local/lib/libwebsockets.so.10
我是libwebsockets的新手,不知道如何解决这个问题......任何人都可以给出任何提示吗? thx
答案 0 :(得分:0)
问题已解决。 看来lws_context_destroy()不是线程安全的函数,用线程锁定它可以解决这个问题:
lock();
lws_context_destroy();
unlock();