Me gustaría controlar el uso de mallocs y liberar en una aplicación utilizando malloc y ganchos libres.usando ganchos gliloc malloc de forma segura para hilos
Aquí está la documentación http://www.gnu.org/s/libc/manual/html_node/Hooks-for-Malloc.html
Desde la página de ejemplo se puede ver que my_malloc_hook
cambia de forma transitoria el gancho de leva malloc (o al gancho anterior en la cadena) antes de volver a invocar malloc.
Esto es un problema cuando se monitorean aplicaciones de subprocesos múltiples (consulte el final de la pregunta para obtener una explicación).
Otros ejemplos del uso de Malloc hook que he encontrado en Internet tienen el mismo problema.
¿Hay alguna forma de volver a escribir esta función para que funcione correctamente en una aplicación de subprocesos múltiples?
Por ejemplo, hay una función de libc interna que puede invocar el gancho malloc que completa la asignación, sin la necesidad de desactivar mi gancho.
No puedo ver el código fuente de la libc debido a la política legal corporativa, por lo que la respuesta puede ser obvia.
Mi especificación de diseño dice que no puedo reemplazar malloc con un diseño diferente de malloc.
Puedo suponer que no hay otros ganchos en juego.
ACTUALIZACIÓN
Desde el gancho malloc se retira temporalmente mientras el servicio de la malloc, otro hilo puede llamar a malloc y no obtener el gancho.
Se ha sugerido que malloc tiene un gran bloqueo que impide que esto ocurra, pero no está documentado, y el hecho de que llamo de manera recursiva malloc sugiere que cualquier bloqueo debe existir después del gancho, o ser ingenioso :
caller ->
malloc ->
malloc-hook (disables hook) ->
malloc -> # possible hazard starts here
malloc_internals
malloc <-
malloc-hook (enables hook) <-
malloc
caller
Si uno de nosotros examina el origen de la libc y le proporciona información basada en él, se encontrará legalmente en el mismo puesto. –
¿Por qué no puedes * mirar * el código fuente de la libc? – Will
Porque podría contaminar nuestro código propietario con el código GPL. El simple hecho de que me digan que una función en particular hará lo que quiero no tiene ese problema. –