session: fix leak on accept fifo alloc failure

Type: fix

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: Ia928d6ea05ff7cb9a15e1ddc58234d000ebfd7fb
This commit is contained in:
Florin Coras
2020-04-09 20:59:20 +00:00
committed by Dave Barach
parent 573f44c2f5
commit 12813d5e4a
2 changed files with 15 additions and 6 deletions

View File

@ -294,7 +294,6 @@ ct_connect (app_worker_t * client_wrk, session_t * ll,
if (ct_init_local_session (client_wrk, server_wrk, sct, ss, ll))
{
clib_warning ("failed");
ct_connection_free (sct);
session_free (ss);
return -1;
@ -303,9 +302,9 @@ ct_connect (app_worker_t * client_wrk, session_t * ll,
ss->session_state = SESSION_STATE_ACCEPTING;
if (app_worker_accept_notify (server_wrk, ss))
{
clib_warning ("failed");
ct_connection_free (sct);
session_free_w_fifos (ss);
segment_manager_dealloc_fifos (ss->rx_fifo, ss->tx_fifo);
session_free (ss);
return -1;
}

View File

@ -1104,7 +1104,10 @@ session_stream_accept (transport_connection_t * tc, u32 listener_index,
s->session_state = SESSION_STATE_CREATED;
if ((rv = app_worker_init_accepted (s)))
return rv;
{
session_free (s);
return rv;
}
session_lookup_add_connection (tc, session_handle (s));
@ -1112,7 +1115,13 @@ session_stream_accept (transport_connection_t * tc, u32 listener_index,
if (notify)
{
app_worker_t *app_wrk = app_worker_get (s->app_wrk_index);
return app_worker_accept_notify (app_wrk, s);
if ((rv = app_worker_accept_notify (app_wrk, s)))
{
session_lookup_del_session (s);
segment_manager_dealloc_fifos (s->rx_fifo, s->tx_fifo);
session_free (s);
return rv;
}
}
return 0;
@ -1138,7 +1147,8 @@ session_dgram_accept (transport_connection_t * tc, u32 listener_index,
app_wrk = app_worker_get (s->app_wrk_index);
if ((rv = app_worker_accept_notify (app_wrk, s)))
{
session_free_w_fifos (s);
segment_manager_dealloc_fifos (s->rx_fifo, s->tx_fifo);
session_free (s);
return rv;
}