{
libmemif_main_t *lm;
- if (private_ctx == NULL)
- return MEMIF_ERR_INVAL_ARG;
-
- lm = (libmemif_main_t *) private_ctx;
+ lm = (private_ctx == NULL) ? &libmemif_main : (libmemif_main_t *) private_ctx;
if (events & MEMIF_FD_EVENT_DEL)
return memif_del_epoll_fd (lm, fd);
DBG ("eventfd: %s", strerror (err));
return memif_syscall_error_handler (err);
}
- lm->control_fd_update (lm->poll_cancel_fd, MEMIF_FD_EVENT_READ, NULL);
+ lm->control_fd_update (lm->poll_cancel_fd, MEMIF_FD_EVENT_READ, lm->private_ctx);
DBG ("libmemif event polling initialized");
}
lm->arm.it_interval.tv_sec = MEMIF_DEFAULT_RECONNECT_PERIOD_SEC;
lm->arm.it_interval.tv_nsec = MEMIF_DEFAULT_RECONNECT_PERIOD_NSEC;
- if (lm->control_fd_update (lm->timerfd, MEMIF_FD_EVENT_READ, NULL) < 0)
+ if (lm->control_fd_update (lm->timerfd, MEMIF_FD_EVENT_READ, lm->private_ctx) < 0)
{
DBG ("callback type memif_control_fd_update_t error!");
err = MEMIF_ERR_CB_FDUPDATE;
memif_control_fd_update_register (lm, on_control_fd_update);
else
{
+ /* private_ctx only used internally by memif_control_fd_update
+ * pointer to this libmemif main
+ */
+ lm->private_ctx = lm;
lm->epfd = epoll_create (1);
memif_control_fd_update_register (lm, memif_control_fd_update);
if ((lm->poll_cancel_fd = eventfd (0, EFD_NONBLOCK)) < 0)
elt.key = ms->fd;
elt.data_struct = ms;
add_list_elt (lm, &elt, &lm->socket_list, &lm->socket_list_len);
- lm->control_fd_update (ms->fd, MEMIF_FD_EVENT_READ, ms->private_ctx);
+ /* if lm->private_ctx == lm event polling is done by libmemif */
+ lm->control_fd_update (ms->fd, MEMIF_FD_EVENT_READ, lm->private_ctx);
ms->type = MEMIF_SOCKET_TYPE_LISTENER;
conn->error_fn = memif_conn_fd_error;
lm->control_list[conn->index].key = conn->fd;
-
lm->control_fd_update (sockfd,
MEMIF_FD_EVENT_READ |
- MEMIF_FD_EVENT_WRITE, conn->private_ctx);
+ MEMIF_FD_EVENT_WRITE, lm->private_ctx);
lm->disconn_slaves--;
if (lm->disconn_slaves == 0)
if (c->fd > 0)
{
memif_msg_send_disconnect (c->fd, (uint8_t *) "interface deleted", 0);
- lm->control_fd_update (c->fd, MEMIF_FD_EVENT_DEL, c->private_ctx);
+ lm->control_fd_update (c->fd, MEMIF_FD_EVENT_DEL, lm->private_ctx);
close (c->fd);
}
get_list_elt (&e, lm->control_list, lm->control_list_len, c->fd);
{
if (c->on_interrupt != NULL)
lm->control_fd_update (mq->int_fd, MEMIF_FD_EVENT_DEL,
- c->private_ctx);
+ lm->private_ctx);
close (mq->int_fd);
}
free_list_elt (lm->interrupt_list, lm->interrupt_list_len,
/* stop listening on this socket */
if (ms->type == MEMIF_SOCKET_TYPE_LISTENER)
{
- lm->control_fd_update (ms->fd, MEMIF_FD_EVENT_DEL, ms->private_ctx);
+ lm->control_fd_update (ms->fd, MEMIF_FD_EVENT_DEL, lm->private_ctx);
free_list_elt (lm->socket_list, lm->socket_list_len, ms->fd);
close (ms->fd);
ms->fd = -1;
}
lm->control_fd_update (c->fd, MEMIF_FD_EVENT_READ | MEMIF_FD_EVENT_MOD,
- c->private_ctx);
+ lm->private_ctx);
return 0;
}
error:
memif_msg_send_disconnect (fd, err_string, 0);
- lm->control_fd_update (fd, MEMIF_FD_EVENT_DEL, c->private_ctx);
+ lm->control_fd_update (fd, MEMIF_FD_EVENT_DEL, lm->private_ctx);
free_list_elt (lm->pending_list, lm->pending_list_len, fd);
close (fd);
fd = -1;
&lm->interrupt_list_len);
lm->control_fd_update (c->rx_queues[i].int_fd, MEMIF_FD_EVENT_READ,
- c->private_ctx);
+ lm->private_ctx);
}
}
for (i = 0; i < c->run_args.num_s2m_rings; i++)
{
lm->control_fd_update (c->rx_queues[i].int_fd, MEMIF_FD_EVENT_READ,
- c->private_ctx);
+ lm->private_ctx);
}
}
add_list_elt (lm, &elt, &lm->pending_list, &lm->pending_list_len);
lm->control_fd_update (conn_fd, MEMIF_FD_EVENT_READ | MEMIF_FD_EVENT_WRITE,
- ms->private_ctx);
+ lm->private_ctx);
return memif_msg_send_hello (lm, conn_fd);
}