2016-08-11 1 views
0

DESCRIPTIONerreur de segmentation sigpipe avec sscanf et le filetage

j'ai fait un mod serveur C Cube 2: Sauerbraten https://github.com/deathstar/QServCollect

tout le code se trouve sur le lien ci-dessus

Le IRC Bot finit par envoyer les données ping/pong sur le socket ouvert. Le processus est threadé et puisque le thread principal est joint via PTHREAD_CREATE_JOINABLE, il meurt lorsque le robot IRC meurt. Cela provoque l'arrêt complet du serveur et j'essaie juste de le déboguer. Toute aide serait appréciée.

KEY

Code IRCBot: IRCBot/ircbot.cpp, IRCBot/ircbot.h

fil conducteur: moteur/server.cpp

LLDB DEBUG RAPPORT

Process 7933 stopped 
* thread #1: tid = 0xa4b8d, 0x00007fff83e4010a libsystem_kernel.dylib`__semwait_signal + 10, queue = 'com.apple.main-thread', stop reason = signal SIGPIPE 
    frame #0: 0x00007fff83e4010a libsystem_kernel.dylib`__semwait_signal + 10 
libsystem_kernel.dylib`__semwait_signal: 
-> 0x7fff83e4010a <+10>: jae 0x7fff83e40114   ; <+20> 
    0x7fff83e4010c <+12>: movq %rax, %rdi 
    0x7fff83e4010f <+15>: jmp 0x7fff83e3a7f2   ; cerror 
    0x7fff83e40114 <+20>: retq 

SERVER LOG

PING :NuclearFallout.WA.US.GameSurge.net 

SENT: PONG :NuclearFallout.WA.US.GameSurge.net 

PING :NuclearFallout.WA.US.GameSurge.net 

SENT: PONG :NuclearFallout.WA.US.GameSurge.net 

[ OK ] looking up sauerbraten.org... 
master server registration failed: failed pinging server 
[ OK ] looking up sauerbraten.org... 
+1

Vous devez afficher les parties pertinentes du code ici, pas à un lien externe. – Barmar

+1

Vous ne recevez pas une erreur de segment d'un sigpipe. Vous pourriez obtenir une faute de seg de votre gestionnaire de sigpipe mal manipuler le premier signal. Que fait votre code et comment traite-t-il les signaux en particulier? –

+0

Lire mon commentaire [ici] (http://pastebin.com/hdeTB1yc), Le code en conflit [ici] (http://pastebin.com/TbyAQqag), fonction principale avec le filetage [ici] (http : //pastebin.com/E7huThZR). –

Répondre

0

Le problème était qu'une fonction (en particulier sscanf) était surchargée de données. Je devais faire un strlen (buff) pour vérifier la taille de la mémoire tampon des données entrant dans la fonction. Essentiellement, il recevait beaucoup plus de données que ce qu'il pouvait gérer et cela causerait un crash à cause de cela.

Si vous implémentez le thread, assurez-vous d'utiliser des implémentations thread-safe.