lws_context_destroy会导致分段错误,如何修复它?

时间:2017-04-01 14:19:09

标签: segmentation-fault libwebsockets

它在我的多线程程序中显示:我开始使用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

1 个答案:

答案 0 :(得分:0)

问题已解决。 看来lws_context_destroy()不是线程安全的函数,用线程锁定它可以解决这个问题:

lock();
lws_context_destroy();
unlock();