Fix: build failure with -fno-common
[lttng-tools.git] / src / bin / lttng-sessiond / ust-app.c
index d0980220d1519d9e5578b062c7fa1998ea65e8c5..d3c28883c74bea2416d9afb8a5f0db7c87c03f91 100644 (file)
 #include "notification-thread-commands.h"
 #include "rotate.h"
 
+struct lttng_ht *ust_app_ht;
+struct lttng_ht *ust_app_ht_by_sock;
+struct lttng_ht *ust_app_ht_by_notify_sock;
+
 static
 int ust_app_flush_app_session(struct ust_app *app, struct ust_app_session *ua_sess);
 
@@ -4161,88 +4165,6 @@ end:
        return ret;
 }
 
-/*
- * For a specific UST session, create the channel for all registered apps.
- */
-int ust_app_create_channel_glb(struct ltt_ust_session *usess,
-               struct ltt_ust_channel *uchan)
-{
-       int ret = 0;
-       struct cds_lfht_iter iter;
-       struct ust_app *app;
-
-       assert(usess);
-       assert(usess->active);
-       assert(uchan);
-
-       DBG2("UST app adding channel %s to UST domain for session id %" PRIu64,
-                       uchan->name, usess->id);
-
-       rcu_read_lock();
-       /* For every registered applications */
-       cds_lfht_for_each_entry(ust_app_ht->ht, &iter, app, pid_n.node) {
-               struct ust_app_session *ua_sess;
-               int session_was_created = 0;
-               bool present_in_tracker =
-                               trace_ust_id_tracker_lookup(LTTNG_TRACKER_VPID,
-                                               usess, app->pid) &&
-                               trace_ust_id_tracker_lookup(LTTNG_TRACKER_VUID,
-                                               usess, app->uid) &&
-                               trace_ust_id_tracker_lookup(LTTNG_TRACKER_VGID,
-                                               usess, app->gid);
-
-               if (!app->compatible || !(present_in_tracker)) {
-                       /*
-                        * This is probably an error this MUST BE TESTED
-                        * Introduced by
-                        * 88e3c2f5610b9ac89b0923d448fee34140fc46fb On app not
-                        * in tracker we should skip it. not sure what to do on
-                        * app !compatible
-                        */
-                       goto error_rcu_unlock;
-               }
-
-               /*
-                * Create session on the tracer side and add it to app session HT. Note
-                * that if session exist, it will simply return a pointer to the ust
-                * app session.
-                */
-               ret = find_or_create_ust_app_session(usess, app, &ua_sess,
-                               &session_was_created);
-               if (ret < 0) {
-                       switch (ret) {
-                       case -ENOTCONN:
-                               /*
-                                * The application's socket is not valid. Either a bad
-                                * socket or a timeout on it. We can't inform the caller
-                                * that for a specific app, the session failed so lets
-                                * continue here; it is not an error.
-                                */
-                               ret = 0;
-                               goto error_rcu_unlock;
-                       case -ENOMEM:
-                       default:
-                               goto error_rcu_unlock;
-                       }
-               }
-
-               if (ua_sess->deleted) {
-                       continue;
-               }
-               ret = ust_app_channel_create(usess, ua_sess, uchan, app, NULL);
-               if (ret) {
-                       if (session_was_created) {
-                               destroy_app_session(app, ua_sess);
-                       }
-                       /* Continue to the next application. */
-               }
-       }
-
-error_rcu_unlock:
-       rcu_read_unlock();
-       return ret;
-}
-
 /*
  * Enable event for a specific session and channel on the tracer.
  */
@@ -4429,6 +4351,11 @@ int ust_app_start_trace(struct ltt_ust_session *usess, struct ust_app *app)
                goto end;
        }
 
+       if (ua_sess->enabled) {
+               pthread_mutex_unlock(&ua_sess->lock);
+               goto end;
+       }
+
        /* Upon restart, we skip the setup, already done */
        if (ua_sess->started) {
                goto skip_setup;
@@ -4469,6 +4396,7 @@ skip_setup:
 
        /* Indicate that the session has been started once */
        ua_sess->started = 1;
+       ua_sess->enabled = 1;
 
        pthread_mutex_unlock(&ua_sess->lock);
 
@@ -4558,6 +4486,7 @@ int ust_app_stop_trace(struct ltt_ust_session *usess, struct ust_app *app)
        }
 
        health_code_update();
+       ua_sess->enabled = 0;
 
        /* Quiescent wait after stopping trace */
        pthread_mutex_lock(&app->sock_lock);
@@ -6343,6 +6272,11 @@ enum lttng_error_code ust_app_rotate_session(struct ltt_session *session)
                        struct buffer_reg_channel *reg_chan;
                        struct consumer_socket *socket;
 
+                       if (!reg->registry->reg.ust->metadata_key) {
+                               /* Skip since no metadata is present */
+                               continue;
+                       }
+
                        /* Get consumer socket to use to push the metadata.*/
                        socket = consumer_find_socket_by_bitness(reg->bits_per_long,
                                        usess->consumer);
This page took 0.025144 seconds and 5 git commands to generate.