aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--extras/libmemif/src/libmemif.h95
-rw-r--r--extras/libmemif/src/main.c468
2 files changed, 1 insertions, 562 deletions
diff --git a/extras/libmemif/src/libmemif.h b/extras/libmemif/src/libmemif.h
index 12d2f1e3af4..f9e3dcd09b3 100644
--- a/extras/libmemif/src/libmemif.h
+++ b/extras/libmemif/src/libmemif.h
@@ -23,7 +23,7 @@
#define _LIBMEMIF_H_
/** Libmemif version. */
-#define LIBMEMIF_VERSION "3.1"
+#define LIBMEMIF_VERSION "4.0"
/** Default name of application using libmemif. */
#define MEMIF_DEFAULT_APP_NAME "libmemif-app"
@@ -98,12 +98,6 @@ typedef enum
#define MEMIF_FD_EVENT_MOD (1 << 4)
/** @} */
-/** \brief Memif per thread main handle
- Pointer of type void, pointing to internal structure.
- Used to identify internal per thread database.
-*/
-typedef void *memif_per_thread_main_handle_t;
-
/** \brief Memif connection handle
pointer of type void, pointing to internal structure
*/
@@ -498,28 +492,6 @@ int memif_init (memif_control_fd_update_t * on_control_fd_update,
char *app_name, memif_alloc_t * memif_alloc,
memif_realloc_t * memif_realloc, memif_free_t * memif_free);
-/** \brief Memif per thread initialization
- @param pt_main - per thread main handle
- @param private_ctx - private context
- @param on_control_fd_update - if control fd updates inform user to watch new fd
- @param app_name - application name (will be truncated to 32 chars)
- @param memif_alloc - custom memory allocator, NULL = default
- @param memif_realloc - custom memory reallocation, NULL = default
- @param memif_free - custom memory free, NULL = default
-
- Per thread version of memif_init ().
- Instead of using global database, creates and initializes unique database,
- identified by 'memif_per_thread_main_handle_t'.
-
- \return memif_err_t
-*/
-int memif_per_thread_init (memif_per_thread_main_handle_t * pt_main,
- void *private_ctx,
- memif_control_fd_update_t * on_control_fd_update,
- char *app_name, memif_alloc_t * memif_alloc,
- memif_realloc_t * memif_realloc,
- memif_free_t * memif_free);
-
/** \brief Memif cleanup
Free libmemif internal allocations.
@@ -528,15 +500,6 @@ int memif_per_thread_init (memif_per_thread_main_handle_t * pt_main,
*/
int memif_cleanup ();
-/** \brief Memif per thread cleanup
- @param pt_main - per thread main handle
-
- Free libmemif internal allocations and sets the handle to NULL.
-
- \return memif_err_t
-*/
-int memif_per_thread_cleanup (memif_per_thread_main_handle_t * pt_main);
-
/** \brief Memory interface create function
@param conn - connection handle for client app
@param args - memory interface connection arguments
@@ -585,19 +548,6 @@ int memif_create (memif_conn_handle_t * conn, memif_conn_args_t * args,
*/
int memif_control_fd_handler (int fd, uint8_t events);
-/** \brief Memif per thread control file descriptor handler
- @param pt_main - per thread main handle
- @param fd - file descriptor on which the event occurred
- @param events - event type(s) that occurred
-
- Per thread version of memif_control_fd_handler.
-
- \return memif_err_t
-
-*/
-int memif_per_thread_control_fd_handler (memif_per_thread_main_handle_t
- pt_main, int fd, uint8_t events);
-
/** \brief Memif delete
@param conn - pointer to memif connection handle
@@ -714,13 +664,6 @@ int memif_poll_event (int timeout);
@param pt_main - per thread main handle
@param timeout - timeout in seconds
- Per thread version of memif_poll_event.
-
- \return memif_err_t
-*/
-int memif_per_thread_poll_event (memif_per_thread_main_handle_t pt_main,
- int timeout);
-
/** \brief Send signal to stop concurrently running memif_poll_event().
The function, however, does not wait for memif_poll_event() to stop.
@@ -735,15 +678,6 @@ int memif_per_thread_poll_event (memif_per_thread_main_handle_t pt_main,
*/
#define MEMIF_HAVE_CANCEL_POLL_EVENT 1
int memif_cancel_poll_event ();
-/** \brief Send signal to stop concurrently running memif_poll_event().
- @param pt_main - per thread main handle
-
- Per thread version of memif_cancel_poll_event.
-
- \return memif_err_t
-*/
-int memif_per_thread_cancel_poll_event (memif_per_thread_main_handle_t
- pt_main);
/** \brief Set connection request timer value
@param timer - new timer value
@@ -755,19 +689,6 @@ int memif_per_thread_cancel_poll_event (memif_per_thread_main_handle_t
*/
int memif_set_connection_request_timer (struct itimerspec timer);
-/** \brief Set connection request timer value
- @param pt_main - per thread main handle
- @param timer - new timer value
-
- Per thread version of memif_set_connection_request_timer
-
- \return memif_err_t
-*/
-int
-memif_per_thread_set_connection_request_timer (memif_per_thread_main_handle_t
- pt_main,
- struct itimerspec timer);
-
/** \brief Send connection request
@param conn - memif connection handle
@@ -794,20 +715,6 @@ int memif_request_connection (memif_conn_handle_t conn);
int memif_create_socket (memif_socket_handle_t * sock, const char *filename,
void *private_ctx);
-/** \brief Create memif socket
- @param pt_main - per thread main handle
- @param sock - socket handle for client app
- @param filename - path to socket file
- @param private_ctx - private context
-
- Per thread version of memif_create_socket.
-
- \return memif_err_t
-*/
-int memif_per_thread_create_socket (memif_per_thread_main_handle_t pt_main,
- memif_socket_handle_t * sock,
- const char *filename, void *private_ctx);
-
/** \brief Delete memif socket
@param sock - socket handle for client app
diff --git a/extras/libmemif/src/main.c b/extras/libmemif/src/main.c
index e70334ae40f..967e033cda3 100644
--- a/extras/libmemif/src/main.c
+++ b/extras/libmemif/src/main.c
@@ -478,27 +478,6 @@ memif_set_connection_request_timer (struct itimerspec timer)
}
int
-memif_per_thread_set_connection_request_timer (memif_per_thread_main_handle_t
- pt_main,
- struct itimerspec timer)
-{
- libmemif_main_t *lm = (libmemif_main_t *) pt_main;
- int err = MEMIF_ERR_SUCCESS;
-
- lm->arm = timer;
-
- /* overwrite timer, if already armed */
- if (lm->disconn_slaves != 0)
- {
- if (timerfd_settime (lm->timerfd, 0, &lm->arm, NULL) < 0)
- {
- err = memif_syscall_error_handler (errno);
- }
- }
- return err;
-}
-
-int
memif_init (memif_control_fd_update_t * on_control_fd_update, char *app_name,
memif_alloc_t * memif_alloc, memif_realloc_t * memif_realloc,
memif_free_t * memif_free)
@@ -646,174 +625,6 @@ error:
return err;
}
-int
-memif_per_thread_init (memif_per_thread_main_handle_t * pt_main,
- void *private_ctx,
- memif_control_fd_update_t * on_control_fd_update,
- char *app_name, memif_alloc_t * memif_alloc,
- memif_realloc_t * memif_realloc,
- memif_free_t * memif_free)
-{
- memif_err_t err = MEMIF_ERR_SUCCESS;
- int i;
- libmemif_main_t *lm;
-
- /* Allocate unique libmemif main */
- if (memif_alloc != NULL)
- lm = memif_alloc (sizeof (libmemif_main_t));
- else
- lm = malloc (sizeof (libmemif_main_t));
-
- if (lm == NULL)
- return MEMIF_ERR_NOMEM;
-
- memset (lm, 0, sizeof (libmemif_main_t));
-
- /* register custom memory management */
- if (memif_alloc != NULL)
- {
- memif_alloc_register (lm, memif_alloc);
- }
- else
- memif_alloc_register (lm, malloc);
-
- if (memif_realloc != NULL)
- {
- memif_realloc_register (lm, memif_realloc);
- }
- else
- memif_realloc_register (lm, realloc);
-
- if (memif_free != NULL)
- memif_free_register (lm, memif_free);
- else
- memif_free_register (lm, free);
-
- lm->private_ctx = private_ctx;
-
- /* set app name */
- if (app_name != NULL)
- {
- strlcpy ((char *) lm->app_name, app_name, MEMIF_NAME_LEN);
- }
- else
- {
- strlcpy ((char *) lm->app_name, MEMIF_DEFAULT_APP_NAME,
- sizeof (lm->app_name));
- }
-
- lm->poll_cancel_fd = -1;
- /* register control fd update callback */
- if (on_control_fd_update != NULL)
- 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)
- {
- err = errno;
- DBG ("eventfd: %s", strerror (err));
- return memif_syscall_error_handler (err);
- }
- lm->control_fd_update (lm->poll_cancel_fd, MEMIF_FD_EVENT_READ,
- lm->private_ctx);
- DBG ("libmemif event polling initialized");
- }
-
- /* Initialize lists */
- lm->control_list_len = 2;
- lm->interrupt_list_len = 2;
- lm->socket_list_len = 1;
- lm->pending_list_len = 1;
-
- lm->control_list =
- lm->alloc (sizeof (memif_list_elt_t) * lm->control_list_len);
- if (lm->control_list == NULL)
- {
- err = MEMIF_ERR_NOMEM;
- goto error;
- }
- lm->interrupt_list =
- lm->alloc (sizeof (memif_list_elt_t) * lm->interrupt_list_len);
- if (lm->interrupt_list == NULL)
- {
- err = MEMIF_ERR_NOMEM;
- goto error;
- }
- lm->socket_list =
- lm->alloc (sizeof (memif_list_elt_t) * lm->socket_list_len);
- if (lm->socket_list == NULL)
- {
- err = MEMIF_ERR_NOMEM;
- goto error;
- }
- lm->pending_list =
- lm->alloc (sizeof (memif_list_elt_t) * lm->pending_list_len);
- if (lm->pending_list == NULL)
- {
- err = MEMIF_ERR_NOMEM;
- goto error;
- }
-
- for (i = 0; i < lm->control_list_len; i++)
- {
- lm->control_list[i].key = -1;
- lm->control_list[i].data_struct = NULL;
- }
- for (i = 0; i < lm->interrupt_list_len; i++)
- {
- lm->interrupt_list[i].key = -1;
- lm->interrupt_list[i].data_struct = NULL;
- }
- for (i = 0; i < lm->socket_list_len; i++)
- {
- lm->socket_list[i].key = -1;
- lm->socket_list[i].data_struct = NULL;
- }
- for (i = 0; i < lm->pending_list_len; i++)
- {
- lm->pending_list[i].key = -1;
- lm->pending_list[i].data_struct = NULL;
- }
-
- /* Initialize autoconnect */
- lm->disconn_slaves = 0;
-
- lm->timerfd = timerfd_create (CLOCK_REALTIME, TFD_NONBLOCK);
- if (lm->timerfd < 0)
- {
- err = memif_syscall_error_handler (errno);
- goto error;
- }
-
- lm->arm.it_value.tv_sec = MEMIF_DEFAULT_RECONNECT_PERIOD_SEC;
- lm->arm.it_value.tv_nsec = MEMIF_DEFAULT_RECONNECT_PERIOD_NSEC;
- 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,
- lm->private_ctx) < 0)
- {
- DBG ("callback type memif_control_fd_update_t error!");
- err = MEMIF_ERR_CB_FDUPDATE;
- goto error;
- }
-
- *pt_main = lm;
-
- return err;
-
-error:
- *pt_main = lm;
- memif_per_thread_cleanup (pt_main);
- return err;
-}
-
static inline memif_ring_t *
memif_get_ring (memif_connection_t * conn, memif_ring_type_t type,
uint16_t ring_num)
@@ -988,78 +799,6 @@ error:
return err;
}
-int
-memif_per_thread_create_socket (memif_per_thread_main_handle_t pt_main,
- memif_socket_handle_t * sock,
- const char *filename, void *private_ctx)
-{
- libmemif_main_t *lm = (libmemif_main_t *) pt_main;
- memif_socket_t *ms = (memif_socket_t *) * sock;
- int i, err = MEMIF_ERR_SUCCESS;
-
- if (lm == NULL)
- return MEMIF_ERR_INVAL_ARG;
-
- for (i = 0; i < lm->socket_list_len; i++)
- {
- if ((ms = (memif_socket_t *) lm->socket_list[i].data_struct) != NULL)
- {
- if (strncmp ((char *) ms->filename, filename,
- strlen ((char *) ms->filename)) == 0)
- return MEMIF_ERR_INVAL_ARG;
- }
- }
-
- /* allocate memif_socket_t */
- ms = NULL;
- ms = lm->alloc (sizeof (memif_socket_t));
- if (ms == NULL)
- {
- err = MEMIF_ERR_NOMEM;
- goto error;
- }
- memset (ms, 0, sizeof (memif_socket_t));
- ms->lm = lm;
- /* set filename */
- memset (ms->filename, 0, sizeof (ms->filename));
- strlcpy ((char *) ms->filename, filename, sizeof (ms->filename));
-
- ms->type = MEMIF_SOCKET_TYPE_NONE;
-
- ms->interface_list_len = 1;
- ms->interface_list =
- lm->alloc (sizeof (memif_list_elt_t) * ms->interface_list_len);
- if (ms->interface_list == NULL)
- {
- err = MEMIF_ERR_NOMEM;
- goto error;
- }
- ms->interface_list[0].key = -1;
- ms->interface_list[0].data_struct = NULL;
-
- *sock = ms;
-
- return err;
-
-error:
- if (ms != NULL)
- {
- if (ms->fd > 0)
- {
- close (ms->fd);
- ms->fd = -1;
- }
- if (ms->interface_list != NULL)
- {
- lm->free (ms->interface_list);
- ms->interface_list = NULL;
- ms->interface_list_len = 0;
- }
- lm->free (ms);
- *sock = ms = NULL;
- }
- return err;
-}
int
memif_create (memif_conn_handle_t * c, memif_conn_args_t * args,
@@ -1385,119 +1124,6 @@ error:
return err;
}
-int
-memif_per_thread_control_fd_handler (memif_per_thread_main_handle_t pt_main,
- int fd, uint8_t events)
-{
- int i, err = MEMIF_ERR_SUCCESS; /* 0 */
- uint16_t num;
- memif_list_elt_t *e = NULL;
- memif_connection_t *conn;
- libmemif_main_t *lm = (libmemif_main_t *) pt_main;
-
- if (fd == lm->timerfd)
- {
- uint64_t b;
- ssize_t size;
- size = read (fd, &b, sizeof (b));
-
- if (size == -1)
- goto error;
-
- for (i = 0; i < lm->control_list_len; i++)
- {
- if ((lm->control_list[i].key < 0)
- && (lm->control_list[i].data_struct != NULL))
- {
- conn = lm->control_list[i].data_struct;
- if (conn->args.is_master)
- continue;
- err = memif_request_connection (conn);
- if (err != MEMIF_ERR_SUCCESS)
- DBG ("memif_request_connection: %s", memif_strerror (err));
- }
- }
- }
- else
- {
- get_list_elt (&e, lm->interrupt_list, lm->interrupt_list_len, fd);
- if (e != NULL)
- {
- if (((memif_connection_t *) e->data_struct)->on_interrupt != NULL)
- {
- num =
- (((memif_connection_t *) e->data_struct)->
- args.is_master) ? ((memif_connection_t *) e->
- data_struct)->run_args.
- num_s2m_rings : ((memif_connection_t *) e->data_struct)->
- run_args.num_m2s_rings;
- for (i = 0; i < num; i++)
- {
- if (((memif_connection_t *) e->data_struct)->
- rx_queues[i].int_fd == fd)
- {
- ((memif_connection_t *) e->data_struct)->
- on_interrupt ((void *) e->data_struct,
- ((memif_connection_t *) e->
- data_struct)->private_ctx, i);
- return MEMIF_ERR_SUCCESS;
- }
- }
- }
- return MEMIF_ERR_SUCCESS;
- }
- get_list_elt (&e, lm->socket_list, lm->socket_list_len, fd);
- if (e != NULL
- && ((memif_socket_t *) e->data_struct)->type ==
- MEMIF_SOCKET_TYPE_LISTENER)
- {
- err =
- memif_conn_fd_accept_ready ((memif_socket_t *) e->data_struct);
- return err;
- }
-
- get_list_elt (&e, lm->pending_list, lm->pending_list_len, fd);
- if (e != NULL)
- {
- err = memif_read_ready (lm, fd);
- return err;
- }
-
- get_list_elt (&e, lm->control_list, lm->control_list_len, fd);
- if (e != NULL)
- {
- if (events & MEMIF_FD_EVENT_READ)
- {
- err =
- ((memif_connection_t *) e->data_struct)->
- read_fn (e->data_struct);
- if (err != MEMIF_ERR_SUCCESS)
- return err;
- }
- if (events & MEMIF_FD_EVENT_WRITE)
- {
- err =
- ((memif_connection_t *) e->data_struct)->
- write_fn (e->data_struct);
- if (err != MEMIF_ERR_SUCCESS)
- return err;
- }
- if (events & MEMIF_FD_EVENT_ERROR)
- {
- err =
- ((memif_connection_t *) e->data_struct)->
- error_fn (e->data_struct);
- if (err != MEMIF_ERR_SUCCESS)
- return err;
- }
- }
- }
-
- return MEMIF_ERR_SUCCESS; /* 0 */
-
-error:
- return err;
-}
int
memif_poll_event (int timeout)
@@ -1542,49 +1168,6 @@ memif_poll_event (int timeout)
}
int
-memif_per_thread_poll_event (memif_per_thread_main_handle_t pt_main,
- int timeout)
-{
- libmemif_main_t *lm = (libmemif_main_t *) pt_main;
- struct epoll_event evt;
- int en = 0, err = MEMIF_ERR_SUCCESS; /* 0 */
- uint32_t events = 0;
- uint64_t counter = 0;
- ssize_t r = 0;
- memset (&evt, 0, sizeof (evt));
- evt.events = EPOLLIN | EPOLLOUT;
- sigset_t sigset;
- sigemptyset (&sigset);
- en = epoll_pwait (lm->epfd, &evt, 1, timeout, &sigset);
- if (en < 0)
- {
- err = errno;
- DBG ("epoll_pwait: %s", strerror (err));
- return memif_syscall_error_handler (err);
- }
- if (en > 0)
- {
- if (evt.data.fd == lm->poll_cancel_fd)
- {
- r = read (evt.data.fd, &counter, sizeof (counter));
- if (r == -1)
- return MEMIF_ERR_DISCONNECTED;
-
- return MEMIF_ERR_POLL_CANCEL;
- }
- if (evt.events & EPOLLIN)
- events |= MEMIF_FD_EVENT_READ;
- if (evt.events & EPOLLOUT)
- events |= MEMIF_FD_EVENT_WRITE;
- if (evt.events & EPOLLERR)
- events |= MEMIF_FD_EVENT_ERROR;
- err = memif_control_fd_handler (evt.data.fd, events);
- return err;
- }
- return 0;
-}
-
-int
memif_cancel_poll_event ()
{
libmemif_main_t *lm = &libmemif_main;
@@ -1600,25 +1183,6 @@ memif_cancel_poll_event ()
return 0;
}
-int
-memif_per_thread_cancel_poll_event (memif_per_thread_main_handle_t pt_main)
-{
- libmemif_main_t *lm = (libmemif_main_t *) pt_main;
- uint64_t counter = 1;
- ssize_t w = 0;
-
- if (lm == NULL)
- return MEMIF_ERR_INVAL_ARG;
-
- if (lm->poll_cancel_fd == -1)
- return 0;
- w = write (lm->poll_cancel_fd, &counter, sizeof (counter));
- if (w < sizeof (counter))
- return MEMIF_ERR_INT_WRITE;
-
- return 0;
-}
-
static void
memif_msg_queue_free (libmemif_main_t * lm, memif_msg_queue_elt_t ** e)
{
@@ -2844,35 +2408,3 @@ memif_cleanup ()
return MEMIF_ERR_SUCCESS; /* 0 */
}
-
-int
-memif_per_thread_cleanup (memif_per_thread_main_handle_t * pt_main)
-{
- libmemif_main_t *lm = (libmemif_main_t *) * pt_main;
-
- if (lm == NULL)
- return MEMIF_ERR_INVAL_ARG;
-
- /* No default socket in case of per thread */
-
- if (lm->control_list)
- lm->free (lm->control_list);
- lm->control_list = NULL;
- if (lm->interrupt_list)
- lm->free (lm->interrupt_list);
- lm->interrupt_list = NULL;
- if (lm->socket_list)
- lm->free (lm->socket_list);
- lm->socket_list = NULL;
- if (lm->pending_list)
- lm->free (lm->pending_list);
- lm->pending_list = NULL;
- if (lm->poll_cancel_fd != -1)
- close (lm->poll_cancel_fd);
-
- lm->free (lm);
-
- *pt_main = NULL;
-
- return MEMIF_ERR_SUCCESS; /* 0 */
-}