• [^] # Re: Je suis pas sur d'avoir compris mais

    Posté par . En réponse au message malloc_hook et multithread. Évalué à 3.

    effectivement c'est ce que j'avais fait. le probleme vient lorsque tu as cette sequence :

    Thread 1:
    appel de malloc
    ->my_malloc_hook
    ->pthread_mutex_lock(&mutex); //mutex non pris a ce moment
    -> __malloc_hook = old_malloc_hook;
    (old_malloc_hook est initialise au valeurs nominale à l'init et jamais modifié)
    -> appel de malloc normal car __malloc_hook a été restaurer

    La le scheduler lance un autre thread qui appel dans la sequence malloc :

    Thread 2 :
    ...
    appel de malloc
    a ce moment le __malloc_hook est initialisé a la valeur par defaut (par Thread 1) et donc c'est le malloc standard qui est réalisé, moralité Thread2 n'est pas en attente sur le mutex car il ne passe pas par my_malloc_hook mais directement par le malloc standard...
    Il faudrait que j'appelle la fonction qui réalise réellement le malloc (qui n'est qu'un wrapper) a la place de malloc(size) ligne 3, mais je ne la connais.
    J'ai essayé __libc_malloc mais elle utilise aussi __malloc_hook.

    Utilisé old_malloc_hook (en utilisant direcctement ret_ptr) n'a rien donné car elle sont à nul par défaut, malloc devant utilisé un autre système quand _malloc_hook n'est pas instantié par l'utilisateur.