}
}
+/*
+ * Create a list of JUL domain events.
+ *
+ * Return number of events in list on success or else a negative value.
+ */
+static int list_lttng_jul_events(struct jul_domain *dom,
+ struct lttng_event **events)
+{
+ int i = 0, ret = 0;
+ unsigned int nb_event = 0;
+ struct jul_event *event;
+ struct lttng_event *tmp_events;
+ struct lttng_ht_iter iter;
+
+ assert(dom);
+ assert(events);
+
+ DBG3("Listing JUL events");
+
+ nb_event = lttng_ht_get_count(dom->events);
+ if (nb_event == 0) {
+ ret = nb_event;
+ goto error;
+ }
+
+ tmp_events = zmalloc(nb_event * sizeof(*tmp_events));
+ if (!tmp_events) {
+ PERROR("zmalloc JUL events session");
+ ret = -LTTNG_ERR_FATAL;
+ goto error;
+ }
+
+ rcu_read_lock();
+ cds_lfht_for_each_entry(dom->events->ht, &iter.iter, event, node.node) {
+ strncpy(tmp_events[i].name, event->name, sizeof(tmp_events[i].name));
+ tmp_events[i].name[sizeof(tmp_events[i].name) - 1] = '\0';
+ tmp_events[i].enabled = event->enabled;
+ i++;
+ }
+ rcu_read_unlock();
+
+ *events = tmp_events;
+ ret = nb_event;
+
+error:
+ assert(nb_event == i);
+ return ret;
+}
+
/*
* Create a list of ust global domain events.
*/
channel_name);
break;
}
+ case LTTNG_DOMAIN_JUL:
+ {
+ struct ltt_ust_session *usess = session->ust_session;
+
+ assert(usess);
+
+ ret = event_jul_disable(usess, event_name);
+ if (ret != LTTNG_OK) {
+ goto error;
+ }
+
+ break;
+ }
#if 0
case LTTNG_DOMAIN_UST_EXEC_NAME:
case LTTNG_DOMAIN_UST_PID:
DBG3("Disable all UST events in channel %s completed", channel_name);
+ break;
+ }
+ case LTTNG_DOMAIN_JUL:
+ {
+ struct ltt_ust_session *usess = session->ust_session;
+
+ assert(usess);
+
+ ret = event_jul_disable_all(usess);
+ if (ret != LTTNG_OK) {
+ goto error;
+ }
+
break;
}
#if 0
}
break;
}
+ case LTTNG_DOMAIN_JUL:
+ {
+ struct lttng_event uevent;
+ struct lttng_domain tmp_dom;
+ struct ltt_ust_session *usess = session->ust_session;
+
+ assert(usess);
+
+ /* Create the default JUL tracepoint. */
+ uevent.type = LTTNG_EVENT_TRACEPOINT;
+ uevent.loglevel_type = LTTNG_EVENT_LOGLEVEL_ALL;
+ strncpy(uevent.name, DEFAULT_JUL_EVENT_NAME, sizeof(uevent.name));
+ uevent.name[sizeof(uevent.name) - 1] = '\0';
+
+ /*
+ * The domain type is changed because we are about to enable the
+ * default channel and event for the JUL domain that are hardcoded.
+ * This happens in the UST domain.
+ */
+ memcpy(&tmp_dom, domain, sizeof(tmp_dom));
+ tmp_dom.type = LTTNG_DOMAIN_UST;
+
+ ret = cmd_enable_event(session, &tmp_dom, DEFAULT_JUL_CHANNEL_NAME,
+ &uevent, NULL, wpipe);
+ if (ret != LTTNG_OK && ret != LTTNG_ERR_UST_EVENT_ENABLED) {
+ goto error;
+ }
+
+ /* The wild card * means that everything should be enabled. */
+ if (strncmp(event->name, "*", 1) == 0 && strlen(event->name) == 1) {
+ ret = event_jul_enable_all(usess);
+ } else {
+ ret = event_jul_enable(usess, event);
+ }
+ if (ret != LTTNG_OK) {
+ goto error;
+ }
+
+ break;
+ }
#if 0
case LTTNG_DOMAIN_UST_EXEC_NAME:
case LTTNG_DOMAIN_UST_PID:
goto error;
}
+ break;
+ }
+ case LTTNG_DOMAIN_JUL:
+ {
+ struct lttng_event uevent;
+ struct lttng_domain tmp_dom;
+ struct ltt_ust_session *usess = session->ust_session;
+
+ assert(usess);
+
+ /* Create the default JUL tracepoint. */
+ uevent.type = LTTNG_EVENT_TRACEPOINT;
+ uevent.loglevel_type = LTTNG_EVENT_LOGLEVEL_ALL;
+ strncpy(uevent.name, DEFAULT_JUL_EVENT_NAME, sizeof(uevent.name));
+ uevent.name[sizeof(uevent.name) - 1] = '\0';
+
+ /*
+ * The domain type is changed because we are about to enable the
+ * default channel and event for the JUL domain that are hardcoded.
+ * This happens in the UST domain.
+ */
+ memcpy(&tmp_dom, domain, sizeof(tmp_dom));
+ tmp_dom.type = LTTNG_DOMAIN_UST;
+
+ ret = cmd_enable_event(session, &tmp_dom, DEFAULT_JUL_CHANNEL_NAME,
+ &uevent, NULL, wpipe);
+ if (ret != LTTNG_OK && ret != LTTNG_ERR_UST_EVENT_ENABLED) {
+ goto error;
+ }
+
+ ret = event_jul_enable_all(usess);
+ if (ret != LTTNG_OK) {
+ goto error;
+ }
+
break;
}
#if 0
goto error;
}
break;
+ case LTTNG_DOMAIN_JUL:
+ nb_events = jul_list_events(events);
+ if (nb_events < 0) {
+ ret = LTTNG_ERR_UST_LIST_FAIL;
+ goto error;
+ }
+ break;
default:
ret = LTTNG_ERR_UND;
goto error;
if (session->ust_session != NULL) {
DBG3("Listing domains found UST global domain");
nb_dom++;
+
+ if (session->ust_session->domain_jul.being_used) {
+ nb_dom++;
+ }
}
*domains = zmalloc(nb_dom * sizeof(struct lttng_domain));
(*domains)[index].type = LTTNG_DOMAIN_UST;
(*domains)[index].buf_type = session->ust_session->buffer_type;
index++;
+
+ if (session->ust_session->domain_jul.being_used) {
+ (*domains)[index].type = LTTNG_DOMAIN_JUL;
+ (*domains)[index].buf_type = session->ust_session->buffer_type;
+ index++;
+ }
}
return nb_dom;
}
break;
}
+ case LTTNG_DOMAIN_JUL:
+ if (session->ust_session) {
+ nb_event = list_lttng_jul_events(
+ &session->ust_session->domain_jul, events);
+ }
+ break;
default:
ret = LTTNG_ERR_UND;
goto error;