Code Review
/
vpp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
session: fix leak on accept fifo alloc failure
[vpp.git]
/
src
/
vnet
/
session
/
session.c
diff --git
a/src/vnet/session/session.c
b/src/vnet/session/session.c
index
1fa7872
..
d2dc85e
100644
(file)
--- a/
src/vnet/session/session.c
+++ b/
src/vnet/session/session.c
@@
-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)))
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));
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);
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;
}
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)))
{
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;
}
return rv;
}