-local_session_t *
-app_worker_local_session_alloc (app_worker_t * app_wrk)
-{
- local_session_t *s;
- pool_get (app_wrk->local_sessions, s);
- clib_memset (s, 0, sizeof (*s));
- s->app_wrk_index = app_wrk->wrk_index;
- s->session_index = s - app_wrk->local_sessions;
- s->session_type = session_type_from_proto_and_ip (TRANSPORT_PROTO_NONE, 0);
- return s;
-}
-
-void
-app_worker_local_session_free (app_worker_t * app_wrk, local_session_t * s)
-{
- pool_put (app_wrk->local_sessions, s);
- if (CLIB_DEBUG)
- clib_memset (s, 0xfc, sizeof (*s));
-}
-
-local_session_t *
-app_worker_get_local_session (app_worker_t * app_wrk, u32 session_index)
-{
- if (pool_is_free_index (app_wrk->local_sessions, session_index))
- return 0;
- return pool_elt_at_index (app_wrk->local_sessions, session_index);
-}
-
-local_session_t *
-app_worker_get_local_session_from_handle (session_handle_t handle)
-{
- app_worker_t *server_wrk;
- u32 session_index, server_wrk_index;
- local_session_parse_handle (handle, &server_wrk_index, &session_index);
- server_wrk = app_worker_get_if_valid (server_wrk_index);
- if (!server_wrk)
- return 0;
- return app_worker_get_local_session (server_wrk, session_index);
-}
-
-static inline u64
-application_client_local_connect_key (local_session_t * ls)
-{
- return (((u64) ls->app_wrk_index) << 32 | (u64) ls->session_index);
-}
-
-static inline void
-application_client_local_connect_key_parse (u64 key, u32 * app_wrk_index,
- u32 * session_index)
-{
- *app_wrk_index = key >> 32;
- *session_index = key & 0xFFFFFFFF;
-}
-
-void
-app_worker_local_sessions_free (app_worker_t * app_wrk)
-{
- u32 index, server_wrk_index, session_index;
- u64 handle, *handles = 0;
- app_worker_t *server_wrk;
- segment_manager_t *sm;
- local_session_t *ls;
- int i;
-
- /*
- * Local sessions
- */
- if (app_wrk->local_sessions)
- {
- /* *INDENT-OFF* */
- pool_foreach (ls, app_wrk->local_sessions, ({
- app_worker_local_session_disconnect (app_wrk->wrk_index, ls);
- }));
- /* *INDENT-ON* */
- }
-
- /*
- * Local connects
- */
- vec_reset_length (handles);
- /* *INDENT-OFF* */
- hash_foreach (handle, index, app_wrk->local_connects, ({
- vec_add1 (handles, handle);
- }));
- /* *INDENT-ON* */
-
- for (i = 0; i < vec_len (handles); i++)
- {
- application_client_local_connect_key_parse (handles[i],
- &server_wrk_index,
- &session_index);
- server_wrk = app_worker_get_if_valid (server_wrk_index);
- if (server_wrk)
- {
- ls = app_worker_get_local_session (server_wrk, session_index);
- app_worker_local_session_disconnect (app_wrk->wrk_index, ls);
- }
- }
-
- sm = segment_manager_get (app_wrk->local_segment_manager);
- sm->app_wrk_index = SEGMENT_MANAGER_INVALID_APP_INDEX;
- segment_manager_del (sm);
-}
-