Recientemente he empezado a estudiar sobre fugas de memoria en C++, por lo que puedo hacer preguntas ingenuas.
Tengo una biblioteca de C++ que está utilizando OpenSSL - mi tarea es comprobar si hay pérdidas de memoria en esta lib. He ejecutado el Visual Leak Detector para verificar fugas de mem.
veo que las llamadas a SSL_library_init();
y SSL_load_error_strings();
están llevando fugas - google rápida está demostrando que al final del uso Tengo que llamar a los siguientes:OpenSSL :: SSL_library_init() pérdida de memoria
CONF_modules_free();
ERR_remove_state(0);
ENGINE_cleanup();
CONF_modules_unload(1);
ERR_free_strings();
EVP_cleanup();
CRYPTO_cleanup_all_ex_data();
La fuga de hecho disminuyó, pero aún hay dos fugas (que la herramienta VLD me muestra) que sucede porque la llamada SSL_library_init
.
¿Alguien sabe qué más tengo que hacer para liberar todas las fugas de mem?
No recomendaría EVP_cleanup() y CRYPTO_cleanup_all_ex_data(). Si hay múltiples bibliotecas usadas en la aplicación, digamos libssh2, no sabemos cuándo se llamará, y esto descargará todas las tablas y limpiará todos los datos globales. Tomando esta pregunta en consideración una de las librerías de código abierto abiertas, Pegasus implementó esto, y esto está causando bloqueos en nuestra aplicación. Esta biblioteca abierta de pegasus está limpiando toda la tabla y los datos globales de openssl una vez que se hace su uso. Otras bibliotecas en otros hilos están fallando justo en el medio debido a la limpieza. – Srikan
Usarlo en el lugar correcto es importante – Srikan
Relacionado, también consulte [Cómo desinicializar correctamente OpenSSL] (http://stackoverflow.com/q/29845527). – jww