0

它显示在我的多线程程序中:我启动了大约 300 个线程来使用 Websocket(libwebsockets) 连接游戏服务器,主循环是:步骤 1 创建 websocket 的新上下文步骤 2 使用 websocket setp 3 破坏上下文使用函数lws_context_destroy(与服务器断开连接),然后在一段时间后(连接成功大约5k次或更多)返回步骤1,我的程序崩溃(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 的新手,不知道如何解决这个问题......有人可以提供任何提示吗?谢谢

4

1 回答 1

1

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

lock();
lws_context_destroy();
unlock();
于 2017-04-05T09:02:30.883 回答