X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Fconsumer.c;h=1de9cbadbd053749baa81d1a800975dd2bb22a8b;hb=c617c0c651432f9d5ae7adf4c5c1a5fd92ad828e;hp=3ecb72e21e52af045b3fdb956e0ec614a4c570dd;hpb=f7079f6790ccfb78ec7115ccb5b1706f5c18ebfe;p=lttng-tools.git diff --git a/src/common/consumer.c b/src/common/consumer.c index 3ecb72e21..1de9cbadb 100644 --- a/src/common/consumer.c +++ b/src/common/consumer.c @@ -243,7 +243,7 @@ static void destroy_relayd(struct consumer_relayd_sock_pair *relayd) lttng_ht_lookup(relayd_session_id_ht, (void *)((unsigned long) relayd->sessiond_session_id), &iter); node = lttng_ht_iter_get_node_ulong(&iter); - if (node != NULL) { + if (node == NULL) { /* We assume the relayd is being or is destroyed */ return; } @@ -2101,17 +2101,13 @@ void *consumer_thread_metadata_poll(void *data) DBG("Metadata main loop started"); while (1) { - lttng_poll_reset(&events); - - nb_fd = LTTNG_POLL_GETNB(&events); - /* Only the metadata pipe is set */ - if (nb_fd == 0 && consumer_quit == 1) { + if (events.nb_fd == 0 && consumer_quit == 1) { goto end; } restart: - DBG("Metadata poll wait with %d fd(s)", nb_fd); + DBG("Metadata poll wait with %d fd(s)", events.nb_fd); ret = lttng_poll_wait(&events, -1); DBG("Metadata event catched in thread"); if (ret < 0) { @@ -2122,6 +2118,8 @@ restart: goto error; } + nb_fd = ret; + /* From here, the event is a metadata wait fd */ for (i = 0; i < nb_fd; i++) { revents = LTTNG_POLL_GETEV(&events, i); @@ -2714,7 +2712,7 @@ int consumer_add_relayd_socket(int net_seq_idx, int sock_type, struct pollfd *consumer_sockpoll, struct lttcomm_sock *relayd_sock, unsigned int sessiond_id) { - int fd = -1, ret = -1; + int fd = -1, ret = -1, relayd_created = 0; enum lttng_error_code ret_code = LTTNG_OK; struct consumer_relayd_sock_pair *relayd; struct consumer_relayd_session_id *relayd_id_node; @@ -2738,6 +2736,7 @@ int consumer_add_relayd_socket(int net_seq_idx, int sock_type, goto error; } relayd->sessiond_session_id = (uint64_t) sessiond_id; + relayd_created = 1; } /* Poll on consumer socket. */ @@ -2853,6 +2852,14 @@ error: PERROR("close received socket"); } } + + if (relayd_created) { + /* We just want to cleanup. Ignore ret value. */ + (void) relayd_close(&relayd->control_sock); + (void) relayd_close(&relayd->data_sock); + free(relayd); + } + return ret; } @@ -3021,10 +3028,12 @@ int consumer_data_pending(uint64_t id) ret = relayd_end_data_pending(&relayd->control_sock, relayd->relayd_session_id, &is_data_inflight); pthread_mutex_unlock(&relayd->ctrl_sock_mutex); - if (ret < 0 || !is_data_inflight) { - /* On error or if NO data inflight, no data is pending. */ + if (ret < 0) { goto data_not_pending; } + if (is_data_inflight) { + goto data_pending; + } } /*