[Top][All Lists]
[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
>