Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
LTTNG_HEALTH_KERNEL,
LTTNG_HEALTH_CONSUMER,
LTTNG_HEALTH_HT_CLEANUP,
LTTNG_HEALTH_KERNEL,
LTTNG_HEALTH_CONSUMER,
LTTNG_HEALTH_HT_CLEANUP,
+ LTTNG_HEALTH_APP_MANAGE_NOTIFY,
HEALTH_TYPE_KERNEL = 3,
HEALTH_TYPE_CONSUMER = 4,
HEALTH_TYPE_HT_CLEANUP = 5,
HEALTH_TYPE_KERNEL = 3,
HEALTH_TYPE_CONSUMER = 4,
HEALTH_TYPE_HT_CLEANUP = 5,
+ HEALTH_TYPE_APP_MANAGE_NOTIFY = 6,
case LTTNG_HEALTH_HT_CLEANUP:
reply.ret_code = health_check_state(HEALTH_TYPE_HT_CLEANUP);
break;
case LTTNG_HEALTH_HT_CLEANUP:
reply.ret_code = health_check_state(HEALTH_TYPE_HT_CLEANUP);
break;
+ case LTTNG_HEALTH_APP_MANAGE_NOTIFY:
+ reply.ret_code = health_check_state(HEALTH_TYPE_APP_MANAGE_NOTIFY);
+ break;
case LTTNG_HEALTH_ALL:
reply.ret_code =
health_check_state(HEALTH_TYPE_APP_MANAGE) &&
case LTTNG_HEALTH_ALL:
reply.ret_code =
health_check_state(HEALTH_TYPE_APP_MANAGE) &&
health_check_state(HEALTH_TYPE_CMD) &&
health_check_state(HEALTH_TYPE_KERNEL) &&
check_consumer_health() &&
health_check_state(HEALTH_TYPE_CMD) &&
health_check_state(HEALTH_TYPE_KERNEL) &&
check_consumer_health() &&
- health_check_state(HEALTH_TYPE_HT_CLEANUP);
+ health_check_state(HEALTH_TYPE_HT_CLEANUP) &&
+ health_check_state(HEALTH_TYPE_APP_MANAGE_NOTIFY);
break;
default:
reply.ret_code = LTTNG_ERR_UND;
break;
default:
reply.ret_code = LTTNG_ERR_UND;
#include "fd-limit.h"
#include "lttng-sessiond.h"
#include "ust-thread.h"
#include "fd-limit.h"
#include "lttng-sessiond.h"
#include "ust-thread.h"
/*
* This thread manage application notify communication.
*/
void *ust_thread_manage_notify(void *data)
{
/*
* This thread manage application notify communication.
*/
void *ust_thread_manage_notify(void *data)
{
+ int i, ret, pollfd, err = -1;
uint32_t revents, nb_fd;
struct lttng_poll_event events;
uint32_t revents, nb_fd;
struct lttng_poll_event events;
rcu_register_thread();
rcu_thread_online();
rcu_register_thread();
rcu_thread_online();
+ health_register(HEALTH_TYPE_APP_MANAGE_NOTIFY);
+
+ health_code_update();
+
ret = sessiond_set_thread_pollset(&events, 2);
if (ret < 0) {
goto error_poll_create;
ret = sessiond_set_thread_pollset(&events, 2);
if (ret < 0) {
goto error_poll_create;
+ health_code_update();
+
while (1) {
DBG3("[ust-thread] Manage notify polling on %d fds",
LTTNG_POLL_GETNB(&events));
/* Inifinite blocking call, waiting for transmission */
restart:
while (1) {
DBG3("[ust-thread] Manage notify polling on %d fds",
LTTNG_POLL_GETNB(&events));
/* Inifinite blocking call, waiting for transmission */
restart:
ret = lttng_poll_wait(&events, -1);
ret = lttng_poll_wait(&events, -1);
if (ret < 0) {
/*
* Restart interrupted system call.
if (ret < 0) {
/*
* Restart interrupted system call.
nb_fd = ret;
for (i = 0; i < nb_fd; i++) {
nb_fd = ret;
for (i = 0; i < nb_fd; i++) {
+ health_code_update();
+
/* Fetch once the poll data */
revents = LTTNG_POLL_GETEV(&events, i);
pollfd = LTTNG_POLL_GETFD(&events, i);
/* Fetch once the poll data */
revents = LTTNG_POLL_GETEV(&events, i);
pollfd = LTTNG_POLL_GETFD(&events, i);
/* Thread quit pipe has been closed. Killing thread. */
ret = sessiond_check_thread_quit_pipe(pollfd, revents);
if (ret) {
/* Thread quit pipe has been closed. Killing thread. */
ret = sessiond_check_thread_quit_pipe(pollfd, revents);
if (ret) {
PERROR("read apps notify pipe");
goto error;
}
PERROR("read apps notify pipe");
goto error;
}
ret = lttng_poll_add(&events, sock,
LPOLLIN | LPOLLERR | LPOLLHUP | LPOLLRDHUP);
ret = lttng_poll_add(&events, sock,
LPOLLIN | LPOLLERR | LPOLLHUP | LPOLLRDHUP);
ERR("Unknown poll events %u for sock %d", revents, pollfd);
continue;
}
ERR("Unknown poll events %u for sock %d", revents, pollfd);
continue;
}
utils_close_pipe(apps_cmd_notify_pipe);
apps_cmd_notify_pipe[0] = apps_cmd_notify_pipe[1] = -1;
DBG("Application notify communication apps thread cleanup complete");
utils_close_pipe(apps_cmd_notify_pipe);
apps_cmd_notify_pipe[0] = apps_cmd_notify_pipe[1] = -1;
DBG("Application notify communication apps thread cleanup complete");
+ if (err) {
+ health_error();
+ ERR("Health error occurred in %s", __func__);
+ }
+ health_unregister();
rcu_thread_offline();
rcu_unregister_thread();
return NULL;
rcu_thread_offline();
rcu_unregister_thread();
return NULL;