2017-04-01 3 views
-1

Il montre dans mon programme multi-thread: Je démarre environ 300 thread pour connecter un serveur de jeu en utilisant Websocket (libwebsockets), la boucle principale est: étape 1 créer un nouveau contexte de websocket étape 2 se connecter avec le serveur en utilisant websocket setp 3 détruit le contexte en utilisant la fonction lws_context_destroy (pour se déconnecter du serveur), puis retourne à l'étape 1 après un certain temps (après succès connecté environ 5k fois ou plus), mon programme plante (100%), les infos de la pile sont listées ci-dessous :lws_context_destroy provoque une erreur de segmentation, comment le réparer?

#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 

Je suis plus récente à libwebsockets, ne savent pas comment résoudre ce problème ... pouvait-on donner des conseils? thx

Répondre

0

Problème résolu. Il semble que lws_context_destroy() n'est pas une fonction de thread-safe, le verrouiller avec un verrou de fil peut résoudre ce problème:

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