This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH v2] malloc: Set and reset all hooks for tracing (Bug 16573)


Reviewed-by: DJ Delorie <dj@redhat.com>

"Carlos O'Donell" <codonell@redhat.com> writes:
> +static void tr_freehook (void *, const void *);
> +static void * tr_mallochook (size_t, const void *);
> +static void * tr_reallochook (void *, size_t, const void *);
> +static void * tr_memalignhook (size_t, size_t, const void *);

Ok, these all match the prototypes now ;-)

> +/* Set all the default non-trace hooks.  */
> +static __always_inline void
> +set_default_hooks (void)

static __always_inline void is used elsewhere in glibc, so OK.

> +{
> +  __free_hook = tr_old_free_hook;
> +  __malloc_hook = tr_old_malloc_hook;
> +  __realloc_hook = tr_old_realloc_hook;
> +  __memalign_hook = tr_old_memalign_hook;
> +}

This basically undoes save_default_hooks.  Ok.  It sets all hooks to
their original defaults.

> +/* Set all of the tracing hooks used for mtrace.  */
> +static __always_inline void
> +set_trace_hooks (void)
> +{
> +  __free_hook = tr_freehook;
> +  __malloc_hook = tr_mallochook;
> +  __realloc_hook = tr_reallochook;
> +  __memalign_hook = tr_memalignhook;
> +}

This sets up the hooks for tracing.  Ok.

> +/* Save the current set of hooks as the default hooks.  */
> +static __always_inline void
> +save_default_hooks (void)
> +{
> +  tr_old_free_hook = __free_hook;
> +  tr_old_malloc_hook = __malloc_hook;
> +  tr_old_realloc_hook = __realloc_hook;
> +  tr_old_memalign_hook = __memalign_hook;
> +}

Ok.

> -  __free_hook = tr_old_free_hook;
> +  set_default_hooks ();

set_default restores the original defaults.  OK.

>     if (tr_old_free_hook != NULL)
>       (*tr_old_free_hook)(ptr, caller);
>     else
>       free (ptr);
> -  __free_hook = tr_freehook;
> +  set_trace_hooks ();

Then we go back to trace hooks.  Ok.

> -  __malloc_hook = tr_old_malloc_hook;
> +  set_default_hooks ();

Ok.  Always default/trace call pairs.

> -  __malloc_hook = tr_mallochook;
> +  set_trace_hooks ();

Ok.

> -  __free_hook = tr_old_free_hook;
> -  __malloc_hook = tr_old_malloc_hook;
> -  __realloc_hook = tr_old_realloc_hook;
> +  set_default_hooks ();

Ok.

> -  __free_hook = tr_freehook;
> -  __malloc_hook = tr_mallochook;
> -  __realloc_hook = tr_reallochook;
> +  set_trace_hooks ();

Ok.

> -  __memalign_hook = tr_old_memalign_hook;
> -  __malloc_hook = tr_old_malloc_hook;
> +  set_default_hooks ();

Ok.

> -  __memalign_hook = tr_memalignhook;
> -  __malloc_hook = tr_mallochook;
> +  set_trace_hooks ();

Ok.  Last of the default/trace pairs.

> -          tr_old_free_hook = __free_hook;
> -          __free_hook = tr_freehook;
> -          tr_old_malloc_hook = __malloc_hook;
> -          __malloc_hook = tr_mallochook;
> -          tr_old_realloc_hook = __realloc_hook;
> -          __realloc_hook = tr_reallochook;
> -          tr_old_memalign_hook = __memalign_hook;
> -          __memalign_hook = tr_memalignhook;
> +	  save_default_hooks ();
> +	  set_trace_hooks ();

We first save all the original hooks, then put in our own.  Ok.

> -  __free_hook = tr_old_free_hook;
> -  __malloc_hook = tr_old_malloc_hook;
> -  __realloc_hook = tr_old_realloc_hook;
> -  __memalign_hook = tr_old_memalign_hook;
> +  set_default_hooks ();

And lastly restore the defaults.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]