|
/project/.../foss/lttng-tools:> git fetch
|
|
/project/.../foss/lttng-tools:> git tree --all
|
|
* 7ac8766 (HEAD, Apply_fix_for_bug539) Apply bug539 patch (from bug539 update #13)
|
|
* cfa9a5a (origin/master, origin/HEAD) Fix: poll compat layer reallocation new size
|
|
* 12d1308 Fix: remove nonblock flag of sessiond socket in consumer
|
|
* f623cc0 Fix: add missing ht iter node assignment in channel thread
|
|
* c7260a8 Fix: Missing RCU locks on access to consumerd's channel ht
|
|
* a5bbe8f Revert "Improve channel listing output format"
|
|
* fe81e5c Fix: add more conditions and a lock to metadata cache flushed
|
|
* 1b532a6 Fix: set metadata closed on a push/close metadata error
|
|
* a32bd77 Fix: skip metadata flushed check if write failed
|
|
* a0c83db Fix: remove one too many metadata refcount increment
|
|
* 07d2ae9 Fix: add missing buffer registry cleanup on error
|
|
* 094d169 Fix: dereference after NULL check
|
|
* 94cc2fd Fix: remove dead code
|
|
* ea207e3 Fix: wrong size in memcpy of kernel channel padding
|
|
* 38476d2 Fix: typo when closing the consumer client socket
|
|
* 30d86f7 Tests: Add multi session per UID with 5 app in streaming mode
|
|
* 605ac75 Tests: Add stress test for multi session per UID
|
|
* 73811ec Fix: get consumer lock before closing/pushing metadata
|
|
* f21dae4 Fix: set channel key to message on notify channel
|
|
* 9d9353f Fix: increment channel refcount on add_stream
|
|
* e43c41c Fix: error handling in kernel add_channel
|
|
* 4c95e62 Fix: close wait_fd on kernel tracing
|
|
* 7f2a805 Tests: Fix possible segfault in health check thread exit test
|
|
* dae1096 (Apply_Patch536_try1) Fix: use lttng pipe to send new stream to thread
|
|
* 13886d2 Change consumer_metadata_pipe to be a lttng_pipe
|
|
* acdb905 Change consumer_data_pipe to be a lttng_pipe
|
|
* 9fd9263 Add wrappers for pipe
|
|
Broken pipe
|
|
/project/.../foss/lttng-tools:> git diff
|
|
/project/.../foss/lttng-tools:> git diff Apply_fix_for_bug539 origin/master
|
|
diff --git a/src/bin/lttng-sessiond/lttng-sessiond.h b/src/bin/lttng-sessiond/lttng-sessiond.h
|
|
index 7338805..a0916c5 100644
|
|
--- a/src/bin/lttng-sessiond/lttng-sessiond.h
|
|
+++ b/src/bin/lttng-sessiond/lttng-sessiond.h
|
|
@@ -66,15 +66,6 @@ struct ust_cmd_queue {
|
|
};
|
|
|
|
/*
|
|
- * Use by the dispatch registration to queue UST command socket to wait for the
|
|
- * notify socket.
|
|
- */
|
|
-struct ust_reg_wait_node {
|
|
- struct ust_app *app;
|
|
- struct cds_list_head head;
|
|
-};
|
|
-
|
|
-/*
|
|
* This pipe is used to inform the thread managing application notify
|
|
* communication that a command is queued and ready to be processed.
|
|
*/
|
|
diff --git a/src/bin/lttng-sessiond/main.c b/src/bin/lttng-sessiond/main.c
|
|
index add3be8..4470afc 100644
|
|
--- a/src/bin/lttng-sessiond/main.c
|
|
+++ b/src/bin/lttng-sessiond/main.c
|
|
@@ -1334,85 +1334,6 @@ error:
|
|
}
|
|
|
|
/*
|
|
- * Sanitize the wait queue of the dispatch registration thread meaning removing
|
|
- * invalid nodes from it. This is to avoid memory leaks for the case the UST
|
|
- * notify socket is never received.
|
|
- */
|
|
-void sanitize_wait_queue(struct cds_list_head *wait_queue)
|
|
-{
|
|
- int ret, nb_fd = 0, i;
|
|
- unsigned int fd_added = 0;
|
|
- struct lttng_poll_event events;
|
|
- struct ust_reg_wait_node *wait_node = NULL, *tmp_wait_node;
|
|
-
|
|
- assert(wait_queue);
|
|
-
|
|
- lttng_poll_init(&events);
|
|
-
|
|
- ret = lttng_poll_create(&events, 1, LTTNG_CLOEXEC);
|
|
- if (ret < 0) {
|
|
- goto error_create;
|
|
- }
|
|
-
|
|
- cds_list_for_each_entry_safe(wait_node, tmp_wait_node,
|
|
- wait_queue, head) {
|
|
- assert(wait_node->app);
|
|
- ret = lttng_poll_add(&events, wait_node->app->sock,
|
|
- LPOLLHUP | LPOLLERR);
|
|
- if (ret < 0) {
|
|
- goto error;
|
|
- }
|
|
-
|
|
- fd_added = 1;
|
|
- }
|
|
-
|
|
- if (!fd_added) {
|
|
- goto end;
|
|
- }
|
|
-
|
|
- /*
|
|
- * Poll but don't block so we can quickly identify the faulty events and
|
|
- * clean them afterwards from the wait queue.
|
|
- */
|
|
- ret = lttng_poll_wait(&events, 0);
|
|
- if (ret < 0) {
|
|
- goto error;
|
|
- }
|
|
- nb_fd = ret;
|
|
-
|
|
- for (i = 0; i < nb_fd; i++) {
|
|
- /* Get faulty FD. */
|
|
- uint32_t revents = LTTNG_POLL_GETEV(&events, i);
|
|
- int pollfd = LTTNG_POLL_GETFD(&events, i);
|
|
-
|
|
- cds_list_for_each_entry_safe(wait_node, tmp_wait_node,
|
|
- wait_queue, head) {
|
|
- if (pollfd == wait_node->app->sock &&
|
|
- (revents & (LPOLLHUP | LPOLLERR))) {
|
|
- cds_list_del(&wait_node->head);
|
|
- ust_app_destroy(wait_node->app);
|
|
- free(wait_node);
|
|
- break;
|
|
- }
|
|
- }
|
|
- }
|
|
-
|
|
- if (nb_fd > 0) {
|
|
- DBG("Wait queue sanitized, %d node were cleaned up", nb_fd);
|
|
- }
|
|
-
|
|
-end:
|
|
- lttng_poll_clean(&events);
|
|
- return;
|
|
-
|
|
-error:
|
|
- lttng_poll_clean(&events);
|
|
-error_create:
|
|
- ERR("Unable to sanitize wait queue");
|
|
- return;
|
|
-}
|
|
-
|
|
-/*
|
|
* Dispatch request from the registration threads to the application
|
|
* communication thread.
|
|
*/
|
|
@@ -1421,7 +1342,10 @@ static void *thread_dispatch_ust_registration(void *data)
|
|
int ret;
|
|
struct cds_wfq_node *node;
|
|
struct ust_command *ust_cmd = NULL;
|
|
- struct ust_reg_wait_node *wait_node = NULL, *tmp_wait_node;
|
|
+ struct {
|
|
+ struct ust_app *app;
|
|
+ struct cds_list_head head;
|
|
+ } *wait_node = NULL, *tmp_wait_node;
|
|
|
|
CDS_LIST_HEAD(wait_queue);
|
|
|
|
@@ -1431,13 +1355,6 @@ static void *thread_dispatch_ust_registration(void *data)
|
|
/* Atomically prepare the queue futex */
|
|
futex_nto1_prepare(&ust_cmd_queue.futex);
|
|
|
|
- /*
|
|
- * Make sure we don't have node(s) that have hung up before receiving
|
|
- * the notify socket. This is to clean the list in order to avoid
|
|
- * memory leaks from notify socket that are never seen.
|
|
- */
|
|
- sanitize_wait_queue(&wait_queue);
|
|
-
|
|
do {
|
|
struct ust_app *app = NULL;
|
|
ust_cmd = NULL;
|
|
diff --git a/src/bin/lttng-sessiond/ust-app.c b/src/bin/lttng-sessiond/ust-app.c
|
|
index 00f3bcb..396ca93 100644
|
|
--- a/src/bin/lttng-sessiond/ust-app.c
|
|
+++ b/src/bin/lttng-sessiond/ust-app.c
|
|
@@ -4795,15 +4795,3 @@ close_socket:
|
|
call_rcu(&obj->head, close_notify_sock_rcu);
|
|
}
|
|
}
|
|
-
|
|
-/*
|
|
- * Destroy a ust app data structure and free its memory.
|
|
- */
|
|
-void ust_app_destroy(struct ust_app *app)
|
|
-{
|
|
- if (!app) {
|
|
- return;
|
|
- }
|
|
-
|
|
- call_rcu(&app->pid_n.head, delete_ust_app_rcu);
|
|
-}
|
|
diff --git a/src/bin/lttng-sessiond/ust-app.h b/src/bin/lttng-sessiond/ust-app.h
|
|
index 30835e0..6e6ff02 100644
|
|
--- a/src/bin/lttng-sessiond/ust-app.h
|
|
+++ b/src/bin/lttng-sessiond/ust-app.h
|
|
@@ -305,7 +305,6 @@ struct ust_app *ust_app_create(struct ust_register_msg *msg, int sock);
|
|
void ust_app_notify_sock_unregister(int sock);
|
|
ssize_t ust_app_push_metadata(struct ust_registry_session *registry,
|
|
struct consumer_socket *socket, int send_zero_data);
|
|
-void ust_app_destroy(struct ust_app *app);
|
|
|
|
#else /* HAVE_LIBLTTNG_UST_CTL */
|
|
|
|
@@ -498,11 +497,6 @@ ssize_t ust_app_push_metadata(struct ust_registry_session *registry,
|
|
{
|
|
return 0;
|
|
}
|
|
-static inline
|
|
-void ust_app_destroy(struct ust_app *app)
|
|
-{
|
|
- return;
|
|
-}
|
|
|
|
#endif /* HAVE_LIBLTTNG_UST_CTL */
|
|
|
|
/project/.../foss/lttng-tools:>
|