Add a function to liblttkconsumerd to get the current list of FDs open. Also export lttng_kconsumerd_change_fd_state to allow a modification to the FD list from an external consumer.
Signed-off-by: Julien Desfossez <[email protected]> --- include/lttng/lttng-kconsumerd.h | 14 ++++++++++++++ liblttngkconsumerd/lttngkconsumerd.c | 24 ++++++++++++++++++++++-- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/include/lttng/lttng-kconsumerd.h b/include/lttng/lttng-kconsumerd.h index 454af6e..a32a953 100644 --- a/include/lttng/lttng-kconsumerd.h +++ b/include/lttng/lttng-kconsumerd.h @@ -210,4 +210,18 @@ extern void lttng_kconsumerd_set_error_sock( extern void lttng_kconsumerd_set_command_sock_path( struct lttng_kconsumerd_local_data *ctx, char *sock); +/* + * Export a copy of the list of FDs + * The copy has to be initialised by the caller, the function appends a struct + * lttng_kconsumerd_fd per fd to the list + */ +extern void lttng_kconsumerd_get_fd_list_copy( + struct lttng_kconsumerd_fd_list *copy); + +/* + * Update a fd according to what we just received. + */ +extern void lttng_kconsumerd_change_fd_state(int sessiond_fd, + enum lttng_kconsumerd_fd_state state); + #endif /* _LTTNG_KCONSUMERD_H */ diff --git a/liblttngkconsumerd/lttngkconsumerd.c b/liblttngkconsumerd/lttngkconsumerd.c index 81749be..45c51d9 100644 --- a/liblttngkconsumerd/lttngkconsumerd.c +++ b/liblttngkconsumerd/lttngkconsumerd.c @@ -195,9 +195,29 @@ end: } /* + * Export a copy of the list of FDs + * The copy has to be initialised by the caller, the function appends a struct + * lttng_kconsumerd_fd per fd to the list + */ +void lttng_kconsumerd_get_fd_list_copy(struct lttng_kconsumerd_fd_list *copy) +{ + struct lttng_kconsumerd_fd *tmp_fd; + struct lttng_kconsumerd_fd *iter; + + pthread_mutex_lock(&kconsumerd_data.lock); + cds_list_for_each_entry(iter, &kconsumerd_data.fd_list.head, list) { + tmp_fd = malloc(sizeof(struct lttng_kconsumerd_fd)); + memcpy(tmp_fd, iter, sizeof(struct lttng_kconsumerd_fd)); + cds_list_add(&tmp_fd->list, ©->head); + } + pthread_mutex_unlock(&kconsumerd_data.lock); +} + + +/* * Update a fd according to what we just received. */ -static void kconsumerd_change_fd_state(int sessiond_fd, +void lttng_kconsumerd_change_fd_state(int sessiond_fd, enum lttng_kconsumerd_fd_state state) { struct lttng_kconsumerd_fd *iter; @@ -321,7 +341,7 @@ static int kconsumerd_consumerd_recv_fd( } break; case UPDATE_STREAM: - kconsumerd_change_fd_state(lkm.fd, lkm.state); + lttng_kconsumerd_change_fd_state(lkm.fd, lkm.state); break; default: break; -- 1.7.4.1 _______________________________________________ ltt-dev mailing list [email protected] http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev
