+int
+app_worker_add_half_open (app_worker_t * app_wrk, transport_proto_t tp,
+ session_handle_t ho_handle,
+ session_handle_t wrk_handle)
+{
+ ASSERT (vlib_get_thread_index () == 0);
+ vec_validate (app_wrk->half_open_table, tp);
+ hash_set (app_wrk->half_open_table[tp], ho_handle, wrk_handle);
+ return 0;
+}
+
+int
+app_worker_del_half_open (app_worker_t * app_wrk, transport_proto_t tp,
+ session_handle_t ho_handle)
+{
+ ASSERT (vlib_get_thread_index () == 0);
+ hash_unset (app_wrk->half_open_table[tp], ho_handle);
+ return 0;
+}
+
+u64
+app_worker_lookup_half_open (app_worker_t * app_wrk, transport_proto_t tp,
+ session_handle_t ho_handle)
+{
+ u64 *ho_wrk_handlep;
+
+ /* No locking because all updates are done from main thread */
+ ho_wrk_handlep = hash_get (app_wrk->half_open_table[tp], ho_handle);
+ if (!ho_wrk_handlep)
+ return SESSION_INVALID_HANDLE;
+
+ return *ho_wrk_handlep;
+}
+