C/C uses CRYPTO_THREADID_set_callback() as
this is in openssl.c, the first line works on load, the second — on unload.
But if you look in the openssl-1.0.2 code, you'll see
that is, CRYPTO_THREADID_set_callback(NULL) does not remove the callback, in fact there is no way to remove the callback after it's set.
This means that a shared library should never ever use CRYPTO_THREADID_set_callback(), because after the shared library is unloaded the callback will point into unallocated memory, and the callback, again, can never be removed.