mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-24 12:23:32 +01:00
Fix a few more instances of memory not freed on exit (found by weasel).
svn:r3830
This commit is contained in:
parent
b7ce4d1d3d
commit
905c16846a
@ -79,6 +79,11 @@ const char crypto_c_id[] = "$Id$";
|
|||||||
/** Macro: is k a valid RSA private key? */
|
/** Macro: is k a valid RSA private key? */
|
||||||
#define PRIVATE_KEY_OK(k) ((k) && (k)->key && (k)->key->p)
|
#define PRIVATE_KEY_OK(k) ((k) && (k)->key && (k)->key->p)
|
||||||
|
|
||||||
|
#ifdef TOR_IS_MULTITHREADED
|
||||||
|
static tor_mutex_t **_openssl_mutexes = NULL;
|
||||||
|
static int _n_openssl_mutexes = -1;
|
||||||
|
#endif
|
||||||
|
|
||||||
struct crypto_pk_env_t
|
struct crypto_pk_env_t
|
||||||
{
|
{
|
||||||
int refs; /* reference counting so we don't have to copy keys */
|
int refs; /* reference counting so we don't have to copy keys */
|
||||||
@ -170,6 +175,16 @@ int crypto_global_init()
|
|||||||
int crypto_global_cleanup()
|
int crypto_global_cleanup()
|
||||||
{
|
{
|
||||||
ERR_free_strings();
|
ERR_free_strings();
|
||||||
|
#ifdef TOR_IS_MULTITHREADED
|
||||||
|
if (_n_openssl_mutexes) {
|
||||||
|
int i;
|
||||||
|
for (i=0;i<_n_openssl_mutexes;++i) {
|
||||||
|
tor_mutex_free(_openssl_mutexes[i]);
|
||||||
|
}
|
||||||
|
tor_free(_openssl_mutexes);
|
||||||
|
_n_openssl_mutexes = 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1631,7 +1646,6 @@ secret_to_key(char *key_out, size_t key_out_len, const char *secret,
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef TOR_IS_MULTITHREADED
|
#ifdef TOR_IS_MULTITHREADED
|
||||||
static tor_mutex_t **_openssl_mutexes = NULL;
|
|
||||||
static void
|
static void
|
||||||
_openssl_locking_cb(int mode, int n, const char *file, int line)
|
_openssl_locking_cb(int mode, int n, const char *file, int line)
|
||||||
{
|
{
|
||||||
@ -1644,8 +1658,9 @@ static int
|
|||||||
setup_openssl_threading(void) {
|
setup_openssl_threading(void) {
|
||||||
int i;
|
int i;
|
||||||
int n = CRYPTO_num_locks();
|
int n = CRYPTO_num_locks();
|
||||||
|
_n_openssl_mutexes = n;
|
||||||
_openssl_mutexes = tor_malloc(n*sizeof(tor_mutex_t *));
|
_openssl_mutexes = tor_malloc(n*sizeof(tor_mutex_t *));
|
||||||
for (i=0; i <n; ++i)
|
for (i=0; i < n; ++i)
|
||||||
_openssl_mutexes[i] = tor_mutex_new();
|
_openssl_mutexes[i] = tor_mutex_new();
|
||||||
CRYPTO_set_locking_callback(_openssl_locking_cb);
|
CRYPTO_set_locking_callback(_openssl_locking_cb);
|
||||||
CRYPTO_set_id_callback(tor_get_thread_id);
|
CRYPTO_set_id_callback(tor_get_thread_id);
|
||||||
|
@ -990,6 +990,10 @@ dirserv_free_all(void)
|
|||||||
tor_free(the_directory_z);
|
tor_free(the_directory_z);
|
||||||
the_directory_len = 0;
|
the_directory_len = 0;
|
||||||
the_directory_z_len = 0;
|
the_directory_z_len = 0;
|
||||||
|
tor_free(the_runningrouters);
|
||||||
|
tor_free(the_runningrouters_z);
|
||||||
|
the_runningrouters_len = 0;
|
||||||
|
the_runningrouters_z_len = 0;
|
||||||
tor_free(cached_directory.dir);
|
tor_free(cached_directory.dir);
|
||||||
tor_free(cached_directory.dir_z);
|
tor_free(cached_directory.dir_z);
|
||||||
tor_free(cached_runningrouters.dir);
|
tor_free(cached_runningrouters.dir);
|
||||||
|
Loading…
Reference in New Issue
Block a user