Project

General

Profile

Bug #539 » patch539_jun10_gitdiff.log

git diff after applying the patch - Tan le tran, 06/10/2013 11:44 AM

 
/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:>
(4-4/5)