maitretarot-devel-fr
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Maitretarot-devel-fr] avance des clients/ia


From: philippe brochard
Subject: Re: [Maitretarot-devel-fr] avance des clients/ia
Date: 28 Oct 2002 00:21:31 +0100
User-agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2

Yves Mettier <address@hidden> writes:

> On 26 Oct 2002 14:42:14 +0200
> philippe brochard <address@hidden> wrote:
> 
> > Yves Mettier <address@hidden> writes:
> > 
> > Il y a toujours un truc qui me fait bizarre au niveau de 
> > libmt_channels_set_has_enough_data_to_read (fonction
> > player_read_data, libmt_player_client.c ligne 76),
> > on ne passe jamais dans la boucle while, autrement dit
> > libmt_channels_set_has_enough_data_to_read indique tout de
> > suite qu'il y a assez de donnee a lire => en gros le while
> > ne sert a rien. Enfin c'est peut etre normal.
> 
> On bosse dans des conditions favorables. Y'a toujours assez de donnees
> a lire.
> Si on bosse dans des conditions moins favorables, style reseau lent,
> ou pour le serveur avec des clients qui font chier, ca peut arriver!
> 
> De toute facon, y'a une autre maniere de voir ca.
> T'es oblige de faire un if pour verifier qu'il y a assez a lire.
> Or si la condition est fausse, un if et un while, c'est pareil!
> Donc y'a franchement aucun probleme a mettre un while.
> 
Ok, donc c'est normal :)


Bon, sinon j'ai un autre probleme lie aux threads :

L'ia et le client ncurses fonctionnent correctement,
par contre le client gtk segfault apres l'appel a
libmt_channels_set_free (net_consumer ligne 375) apres
une deconnection d'un autre client ou a la fin d'un
jeu normal quand tout le monde veux arreter.

J'ai rajouter des tests sur c, c->channel[i]->buffer pour voir
s'ils sont != NULL (toujours dans libmt_channels_set_free),
avant ça l'ia et le client ncurses plantaient, apres tout s'est
bien passe, donc je les ai laisses.

Par contre, le client gtk segfault apres l'appel a la
fonction libmt_channels_set_free, ceci parce qu'il ne se
termine pas immediatement apres cet appel (si le client gtk se
termine immediatement apres cette fonction, il n'y a pas de
probleme).

J'ai fais l'essai avec l'ia en ne sortant pas du programme
(while (1) apres la deconnection) et elle segfault de la
meme maniere que le client gtk.

La question que je me pose est comment est-ce qu'on arrete la
thread de libmaitretarot apres la liberation des channels ?
Est-ce que ce n'est pas a libmt_channels_set_free de se charger
de ca ?

Dans tout les cas, le segfault est du a un acces a 'c'
(libmt_channels_set_t *) qui est null apres libmt_channels_set_free
alors qu'il n'y a aucun test pour savoir si 'c' est effectivement
!= NULL et qu'il y a des appels a des fonctions qui cherchent a
utiliser 'c' (exemple channel_read_data_from_the_net ligne 184
-> une des lignes qui produit le segfault) 



Philippe

-- 
(    )
 ~oo~         Philippe Brochard    <address@hidden>
  .. Gnu!                           http://hocwp.free.fr
  / =\   \=
 -   -    -   -=-= http://www.fsf.org/home.fr.html =-=-




reply via email to

[Prev in Thread] Current Thread [Next in Thread]