if (wrk->mqs_epfd > 0)
close (wrk->mqs_epfd);
+ pool_free (wrk->sessions);
+ pool_free (wrk->mq_evt_conns);
hash_free (wrk->session_index_by_vpp_handles);
vec_free (wrk->mq_events);
vec_free (wrk->mq_msg_vector);
+ vec_free (wrk->ep_level_evts);
+ vec_free (wrk->ep_level_evts_fl);
+ vec_free (wrk->unhandled_evts_vector);
+ vec_free (wrk->pending_session_wrk_updates);
+ clib_bitmap_free (wrk->rd_bitmap);
+ clib_bitmap_free (wrk->wr_bitmap);
+ clib_bitmap_free (wrk->ex_bitmap);
vcl_worker_free (wrk);
clib_spinlock_unlock (&vcm->workers_lock);
}
return c;
}
+int
+vcl_session_share_fifos (vcl_session_t *s, svm_fifo_t *rxf, svm_fifo_t *txf)
+{
+ vcl_worker_t *wrk = vcl_worker_get_current ();
+ fifo_segment_t *fs;
+
+ clib_rwlock_reader_lock (&vcm->segment_table_lock);
+
+ fs = fifo_segment_get_segment (&vcm->segment_main, rxf->segment_index);
+ s->rx_fifo = fifo_segment_duplicate_fifo (fs, rxf);
+ s->tx_fifo = fifo_segment_duplicate_fifo (fs, txf);
+
+ clib_rwlock_reader_unlock (&vcm->segment_table_lock);
+
+ svm_fifo_add_subscriber (s->rx_fifo, wrk->vpp_wrk_index);
+ svm_fifo_add_subscriber (s->tx_fifo, wrk->vpp_wrk_index);
+
+ return 0;
+}
+
/*
* fd.io coding-style-patch-verification: ON
*