summaryrefslogtreecommitdiffstats
path: root/src/vnet/tls/tls.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/vnet/tls/tls.c')
-rw-r--r--src/vnet/tls/tls.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/vnet/tls/tls.c b/src/vnet/tls/tls.c
index c2fe4d7e75b..32077c2a85b 100644
--- a/src/vnet/tls/tls.c
+++ b/src/vnet/tls/tls.c
@@ -427,7 +427,8 @@ tls_session_cleanup_ho (session_t *s)
/* session opaque stores the opaque passed on connect */
ho_index = s->opaque;
ctx = tls_ctx_half_open_get (ho_index);
- session_half_open_delete_notify (&ctx->connection);
+ if (!ctx->no_app_session)
+ session_half_open_delete_notify (&ctx->connection);
tls_ctx_half_open_free (ho_index);
}
@@ -946,10 +947,19 @@ static void
tls_cleanup_ho (u32 ho_index)
{
tls_ctx_t *ctx;
+ session_t *s;
ctx = tls_ctx_half_open_get (ho_index);
- session_cleanup_half_open (ctx->tls_session_handle);
- tls_ctx_half_open_free (ho_index);
+ s = session_get_from_handle (ctx->tls_session_handle);
+ /* If no pending cleanup notification, force cleanup now. Otherwise,
+ * wait for cleanup notification and set no app session on ctx */
+ if (s->session_state != SESSION_STATE_TRANSPORT_DELETED)
+ {
+ session_cleanup_half_open (ctx->tls_session_handle);
+ tls_ctx_half_open_free (ho_index);
+ }
+ else
+ ctx->no_app_session = 1;
}
int