X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fsession%2Fapplication.c;h=68bbd59098e6c6c9ec75e80c5fe8e6d1b3259d52;hb=7fb0fe1;hp=7bc2c11442a835c32dcef8bb14fceaa06bfbd1e3;hpb=f6647e0f3653929a0528f5eb97337016bdda01be;p=vpp.git diff --git a/src/vnet/session/application.c b/src/vnet/session/application.c index 7bc2c11442a..68bbd59098e 100644 --- a/src/vnet/session/application.c +++ b/src/vnet/session/application.c @@ -442,16 +442,12 @@ application_start_listen (application_t * srv, session_endpoint_t * sep, session_type_t sst; sst = session_type_from_proto_and_ip (sep->transport_proto, sep->is_ip4); - s = listen_session_new (sst); + s = listen_session_new (0, sst); s->app_index = srv->index; - if (stream_session_listen (s, sep)) - goto err; - /* Allocate segment manager. All sessions derived out of a listen session * have fifos allocated by the same segment manager. */ - sm = application_alloc_segment_manager (srv); - if (sm == 0) + if (!(sm = application_alloc_segment_manager (srv))) goto err; /* Add to app's listener table. Useful to find all child listeners @@ -459,6 +455,13 @@ application_start_listen (application_t * srv, session_endpoint_t * sep, handle = listen_session_get_handle (s); hash_set (srv->listeners_table, handle, segment_manager_index (sm)); + if (stream_session_listen (s, sep)) + { + segment_manager_del (sm); + hash_unset (srv->listeners_table, handle); + goto err; + } + *res = handle; return 0; @@ -566,8 +569,7 @@ application_get_local_segment_manager_w_session (application_t * app, stream_session_t *listener; if (application_local_session_listener_has_transport (ls)) { - listener = listen_session_get (ls->listener_session_type, - ls->listener_index); + listener = listen_session_get (ls->listener_index); return application_get_listen_segment_manager (app, listener); } return segment_manager_get (app->local_segment_manager);