Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
LTTNG_HEALTH_CONSUMER,
LTTNG_HEALTH_HT_CLEANUP,
LTTNG_HEALTH_APP_MANAGE_NOTIFY,
LTTNG_HEALTH_CONSUMER,
LTTNG_HEALTH_HT_CLEANUP,
LTTNG_HEALTH_APP_MANAGE_NOTIFY,
+ LTTNG_HEALTH_APP_REG_DISPATCH,
HEALTH_TYPE_CONSUMER = 4,
HEALTH_TYPE_HT_CLEANUP = 5,
HEALTH_TYPE_APP_MANAGE_NOTIFY = 6,
HEALTH_TYPE_CONSUMER = 4,
HEALTH_TYPE_HT_CLEANUP = 5,
HEALTH_TYPE_APP_MANAGE_NOTIFY = 6,
+ HEALTH_TYPE_APP_REG_DISPATCH = 7,
*/
static void *thread_dispatch_ust_registration(void *data)
{
*/
static void *thread_dispatch_ust_registration(void *data)
{
struct cds_wfq_node *node;
struct ust_command *ust_cmd = NULL;
struct {
struct cds_wfq_node *node;
struct ust_command *ust_cmd = NULL;
struct {
struct cds_list_head head;
} *wait_node = NULL, *tmp_wait_node;
struct cds_list_head head;
} *wait_node = NULL, *tmp_wait_node;
+ health_register(HEALTH_TYPE_APP_REG_DISPATCH);
+
+ health_code_update();
+
CDS_LIST_HEAD(wait_queue);
DBG("[thread] Dispatch UST command started");
while (!CMM_LOAD_SHARED(dispatch_thread_exit)) {
CDS_LIST_HEAD(wait_queue);
DBG("[thread] Dispatch UST command started");
while (!CMM_LOAD_SHARED(dispatch_thread_exit)) {
+ health_code_update();
+
/* Atomically prepare the queue futex */
futex_nto1_prepare(&ust_cmd_queue.futex);
/* Atomically prepare the queue futex */
futex_nto1_prepare(&ust_cmd_queue.futex);
struct ust_app *app = NULL;
ust_cmd = NULL;
struct ust_app *app = NULL;
ust_cmd = NULL;
/* Dequeue command for registration */
node = cds_wfq_dequeue_blocking(&ust_cmd_queue.queue);
if (node == NULL) {
/* Dequeue command for registration */
node = cds_wfq_dequeue_blocking(&ust_cmd_queue.queue);
if (node == NULL) {
*/
cds_list_for_each_entry_safe(wait_node, tmp_wait_node,
&wait_queue, head) {
*/
cds_list_for_each_entry_safe(wait_node, tmp_wait_node,
&wait_queue, head) {
if (wait_node->app->pid == ust_cmd->reg_msg.pid) {
wait_node->app->notify_sock = ust_cmd->sock;
cds_list_del(&wait_node->head);
if (wait_node->app->pid == ust_cmd->reg_msg.pid) {
wait_node->app->notify_sock = ust_cmd->sock;
cds_list_del(&wait_node->head);
}
} while (node != NULL);
}
} while (node != NULL);
/* Futex wait on queue. Blocking call on futex() */
futex_nto1_wait(&ust_cmd_queue.futex);
/* Futex wait on queue. Blocking call on futex() */
futex_nto1_wait(&ust_cmd_queue.futex);
+ /* Normal exit, no error */
+ err = 0;
error:
/* Clean up wait queue. */
error:
/* Clean up wait queue. */
}
DBG("Dispatch thread dying");
}
DBG("Dispatch thread dying");
+ if (err) {
+ health_error();
+ ERR("Health error occurred in %s", __func__);
+ }
+ health_unregister();
case LTTNG_HEALTH_APP_MANAGE_NOTIFY:
reply.ret_code = health_check_state(HEALTH_TYPE_APP_MANAGE_NOTIFY);
break;
case LTTNG_HEALTH_APP_MANAGE_NOTIFY:
reply.ret_code = health_check_state(HEALTH_TYPE_APP_MANAGE_NOTIFY);
break;
+ case LTTNG_HEALTH_APP_REG_DISPATCH:
+ reply.ret_code = health_check_state(HEALTH_TYPE_APP_REG_DISPATCH);
+ 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_KERNEL) &&
check_consumer_health() &&
health_check_state(HEALTH_TYPE_HT_CLEANUP) &&
health_check_state(HEALTH_TYPE_KERNEL) &&
check_consumer_health() &&
health_check_state(HEALTH_TYPE_HT_CLEANUP) &&
- health_check_state(HEALTH_TYPE_APP_MANAGE_NOTIFY);
+ health_check_state(HEALTH_TYPE_APP_MANAGE_NOTIFY) &&
+ health_check_state(HEALTH_TYPE_APP_REG_DISPATCH);
break;
default:
reply.ret_code = LTTNG_ERR_UND;
break;
default:
reply.ret_code = LTTNG_ERR_UND;