ProjetM1MPRI2013 / central

Repo principal
6 stars 0 forks source link

Segfault network #31

Open dbaelde opened 10 years ago

dbaelde commented 10 years ago

Bonjour @mheinric. La modif 9255e89c est bien vue, mais ne corrige pas les segfault que j'observe. J'espérais aussi avoir moins de problème de synchro client/server (messages perdus) mais le joueur reste assez incontrolable. Je me concentre ici sur la segfault: receive_messages continue de se retrouver avec des string& à des adresses étranges.

J'ai annoté mon code avec un test quand une string est pushée, je vérifie que son adresse n'est pas inférieure à 0x7ffff0000000. Aucun problème ici. Ensuite dans receive_message, quand l'adresse est inférieure à 0xfff je ne fais rien, je log juste l'adresse (je m'arrête à la valeur assez basse 0xfff pour avoir ensuite une segfault au lieu d'un log énorme). On voit ainsi NULL, puis une suite bizarrement croissante d'adresses invalides:

[2014-02-15 11:44:54.981659] [0xd75f0700] [error]   msg addr = 0
[2014-02-15 11:44:54.981736] [0xd75f0700] [error]   msg addr = 0x8
[2014-02-15 11:44:54.981779] [0xd75f0700] [error]   msg addr = 0x10
[2014-02-15 11:44:54.981820] [0xd75f0700] [error]   msg addr = 0x18
[2014-02-15 11:44:54.981860] [0xd75f0700] [error]   msg addr = 0x20
[2014-02-15 11:44:54.981908] [0xd75f0700] [error]   msg addr = 0x28
[2014-02-15 11:44:54.981956] [0xd75f0700] [error]   msg addr = 0x30
[2014-02-15 11:44:54.982011] [0xd75f0700] [error]   msg addr = 0x38
[2014-02-15 11:44:54.982041] [0xd75f0700] [error]   msg addr = 0x40
[2014-02-15 11:44:54.982069] [0xd75f0700] [error]   msg addr = 0x48

Ceci se produit en général en moins de 30s de jeu, en bougeant le joueur un peu n'importe comment. Est-ce que tu arrives à reproduire?

dbaelde commented 10 years ago

En relisant le diff du commit mentionné plus haut, je crains que tu n'exploites pas assez systématiquement ton mutex. En particulier les push ne sont pas en section critique.

mheinric commented 10 years ago

Effectivement, je viens de corriger le lock()/unlock() qui manquait côté serveur. J'espère que ça résoudra le problème. Je vais essayer de voir si j'arrive à reproduire le bug encore... Sinon vu que pour le moment ça fonctionne en local, il ne devrait pas y avoir trop de messages perdus. Chez moi on arrive pas trop mal à controler le joueur (du moment qu'on ne frôle pas trop les murs)