return KNOT_EOK;
}
+/** undo configure_xsk_umem() */
+static void deconfigure_xsk_umem(struct xsk_umem_info *umem)
+{
+ xsk_umem__delete(umem->umem); // return code cases don't seem useful
+ free(umem->frames);
+ free(umem->free_indices);
+ free(umem);
+}
+
static struct umem_frame *kxsk_alloc_umem_frame(struct xsk_umem_info *umem)
{
if (unlikely(umem->free_count == 0)) {
kxsk_socket_stop(socket->iface, socket->if_queue);
xsk_socket__delete(socket->xsk);
- // undo configure_xsk_umem()
- xsk_umem__delete(socket->umem->umem);
- free(socket->umem->frames);
- free(socket->umem->free_indices);
- free(socket->umem);
+ deconfigure_xsk_umem(socket->umem);
kxsk_iface_free((struct kxsk_iface *)/*const-cast*/socket->iface);
free(socket);
*socket = xsk_configure_socket(umem, iface, if_queue);
if (!*socket) {
- xsk_umem__delete(umem->umem);
+ deconfigure_xsk_umem(umem);
kxsk_iface_free(iface);
return KNOT_NET_ESOCKET;
}
ret = kxsk_socket_start(iface, (*socket)->if_queue, listen_port, (*socket)->xsk);
if (ret != KNOT_EOK) {
xsk_socket__delete((*socket)->xsk);
- xsk_umem__delete((*socket)->umem->umem);
+ deconfigure_xsk_umem(umem);
kxsk_iface_free(iface);
free(*socket);
*socket = NULL;