tsp-devel
[Top][All Lists]
Advanced

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

Re: [Tsp-devel] Malloc et f ree problèmes


From: Frederik Deweerdt
Subject: Re: [Tsp-devel] Malloc et f ree problèmes
Date: Mon, 12 Nov 2007 18:52:59 +0100
User-agent: Mutt/1.5.12-2006-07-14

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 *)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'.
> Merci d'avance.
> 
> sa
> 
> 
> _______________________________________________
> Tsp-devel mailing list
> address@hidden
> http://lists.nongnu.org/mailman/listinfo/tsp-devel
> 




reply via email to

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