Я хотел бы следить за использованием mallocs и frees в приложении, используя malloc и free hooks.
Здесь документация http://www.gnu.org/s/libc/manual/html_node/Hooks-for-Malloc.html
На странице примера вы можете видеть, что my_malloc_hook
временно переключает галочку malloc (или на предыдущий крючок в цепочке) перед повторным вызовом malloc.
Это проблема при мониторинге многопоточных приложений (см. конец вопроса для объяснения).
Другие примеры использования крюка malloc, который я нашел в Интернете, имеют одинаковую проблему.
Есть ли способ перезаписать эту функцию для правильной работы в многопоточном приложении?
Например, есть ли встроенная функция libc, которую может вызвать hook-ключ malloc, который завершает выделение, без необходимости деактивировать мой крючок.
Я не могу смотреть на исходный код libc из-за корпоративной правовой политики, поэтому ответ может быть очевиден.
Моя спецификация дизайна говорит, что я не могу заменить malloc другим дизайном malloc.
Я могу предположить, что в игре нет других крючков.
ОБНОВЛЕНИЕ
Так как malloc-крючок временно удаляется во время обслуживания malloc, другой поток может вызывать malloc и NOT get hook.
Было высказано предположение, что malloc имеет большой замок вокруг него, который предотвращает это, но он не задокументирован, и тот факт, что я фактически рекурсивно называю malloc, предполагает, что любая блокировка должна существовать после крючка или быть умно умной:
caller ->
malloc ->
malloc-hook (disables hook) ->
malloc -> # possible hazard starts here
malloc_internals
malloc <-
malloc-hook (enables hook) <-
malloc
caller