summaryrefslogtreecommitdiff
path: root/lib/state.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/state.c')
-rw-r--r--lib/state.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/lib/state.c b/lib/state.c
index a00bd34ed9..a8ff0d81f0 100644
--- a/lib/state.c
+++ b/lib/state.c
@@ -459,8 +459,18 @@ int gnutls_init(gnutls_session_t * session, unsigned int flags)
return ret;
}
+ ret = gnutls_mutex_init(&(*session)->internals.epoch_lock);
+ if (ret < 0) {
+ gnutls_assert();
+ gnutls_mutex_deinit(&(*session)->internals.post_negotiation_lock);
+ gnutls_free(*session);
+ return ret;
+ }
+
ret = _gnutls_epoch_setup_next(*session, 1, NULL);
if (ret < 0) {
+ gnutls_mutex_deinit(&(*session)->internals.post_negotiation_lock);
+ gnutls_mutex_deinit(&(*session)->internals.epoch_lock);
gnutls_free(*session);
return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR);
}
@@ -599,8 +609,6 @@ void gnutls_deinit(gnutls_session_t session)
if (session == NULL)
return;
- gnutls_mutex_deinit(&session->internals.post_negotiation_lock);
-
/* remove auth info firstly */
_gnutls_free_auth_info(session);
@@ -650,6 +658,9 @@ void gnutls_deinit(gnutls_session_t session)
/* overwrite any temp TLS1.3 keys */
gnutls_memset(&session->key.proto, 0, sizeof(session->key.proto));
+ gnutls_mutex_deinit(&session->internals.post_negotiation_lock);
+ gnutls_mutex_deinit(&session->internals.epoch_lock);
+
gnutls_free(session);
}