(*__free_hook)(mem, __builtin_return_address (0));
(*__free_hook)(mem, RETURN_ADDRESS (0));
void fREe(Void_t* mem)#elsevoid fREe(mem) Void_t* mem;#endif{  arena *ar_ptr;  mchunkptr p;                          /* chunk corresponding to mem */#if defined _LIBC || defined MALLOC_HOOKS  if (__free_hook != NULL) {#if defined __GNUC__ && __GNUC__ >= 2    (*__free_hook)(mem, __builtin_return_address (0));#else    (*__free_hook)(mem, NULL);#endif    return;  }#endif  if (mem == 0)                              /* free(0) has no effect */    return;  p = mem2chunk(mem);#if HAVE_MMAP  if (chunk_is_mmapped(p))                       /* release mmapped memory. */  {    munmap_chunk(p);    return;  }#endif  ar_ptr = arena_for_ptr(p);#if THREAD_STATS  if(!mutex_trylock(&ar_ptr->mutex))    ++(ar_ptr->stat_lock_direct);  else {    (void)mutex_lock(&ar_ptr->mutex);    ++(ar_ptr->stat_lock_wait);  }#else  (void)mutex_lock(&ar_ptr->mutex);#endif  chunk_free(ar_ptr, p);  (void)mutex_unlock(&ar_ptr->mutex);}