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, &copy->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

Reply via email to