[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE : [Tsp-devel] Malloc et free problèmes
From: |
Arquer Stephane |
Subject: |
RE : [Tsp-devel] Malloc et free problèmes |
Date: |
Tue, 13 Nov 2007 08:41:22 +0100 |
> -----Message d'origine-----
> De : address@hidden
> [mailto:address@hidden
> rg] De la part de Frederik Deweerdt
> Envoyé : lundi 12 novembre 2007 18:53
> À : Transport Sample Protocol development list
> Objet : Re: [Tsp-devel] Malloc et free problèmes
>
>
> Salut Stéphane,
>
> On Mon, Nov 12, 2007 at 05:56:36PM +0100, Arquer Stephane wrote:
> > Salut,
> >
> > J'ai rencontré le problème suivant:
> > la fonction bb_utils_build_sem_name(bb->name) ds posix_bb_sem_get,
> > retourne une adresse = 0x8 qui n'est pas valide, le free
> (de rtems) se
> > plante donc car il ne retrouve pas le bon segment.
> >
> > // code de bb_core_posix.c (posix rtems !)
> > static int posix_bb_sem_get(S_BB_T *bb, int create)
> > {
> > int32_t retcode;
> > char* name_sem = NULL;
> > int oflag = 0;
> > if (create)
> > oflag = O_CREAT | O_EXCL;
> > name_sem = bb_utils_build_sem_name(bb->name);
> > bb->priv.posix.sem_id = (sem_t *)sem_open(name_sem,
> oflag | BB_SEM_ACCESS_RIGHT);
> > if ( bb->priv.posix.sem_id < 0) {
> > LOG(BB_LOG_SEVERE, "BlackBoard::bb_create",
> > "Cannot create semaphore < %s >", name_sem);
> > goto err;
> > }
> > free(name_sem);
> > return BB_OK;
> > err:
> > free(name_sem);
> > return BB_NOK;
> > }
> Petie remarque de style: le goto sert à éviter d'avoir à
> dupliquer le code de sortie dans les cas normaux ou d'erreur.
> Du coup, une utilisation plus "conforme" serait la suivate: {
> int32_t retcode = BB_OK;
> [...]
> if (sem_id < 0) {
> retcode = BB_NOK;
> goto err;
> }
> [...]
> err:
> free(name_sem);
> return retcode;
> }
> Comme ça tu n'as qu'un seul appel à free. Sinon, autant
> éviter le goto et gérer l'erreur dans le if.
> >
> > Pour éviter cela, j'ai modifié l'appel de sem_open :
> > bb->priv.posix.sem_id = (sem_t
> > bb->*)sem_open(bb_utils_build_sem_name(bb->name),
> > oflag |
> BB_SEM_ACCESS_RIGHT);
> >
> > Auriez-vous une idée de la provenance de ce type de problème ?
> > (contexte de fonction ??)
> >
> Que vaut bb->name dans ce cas? Le cas d'erreur qui vient à
> l'esprit dans bb_utils_build_sem_name, c'est un bb->name qui
> ne soit pas terminé par '\0'.
Le problème vient de l'adresse retournée par bb_utils_build_sem_name(bb->name):
0x8 dans mon cas alors que la même opération dans le "main" de mon exécutif
retourne une adresse valide du style 0x1e159d1f.
C'est comme il y avait un contexte local.
> > Merci d'avance.
> >
> > sa
> >
> >
> > _______________________________________________
> > Tsp-devel mailing list
> > address@hidden
> > http://lists.nongnu.org/mailman/listinfo/tsp-devel
> >
>
>
> _______________________________________________
> Tsp-devel mailing list
> address@hidden
> http://lists.nongnu.org/mailman/listinfo/tsp-devel
>
- RE : [Tsp-devel] Malloc et free problèmes,
Arquer Stephane <=