Fix: sessiond: use uint64_t for all session ids
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Fri, 28 Jun 2013 16:19:51 +0000 (12:19 -0400)
committerDavid Goulet <dgoulet@efficios.com>
Fri, 28 Jun 2013 18:29:26 +0000 (14:29 -0400)
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
src/bin/lttng-sessiond/buffer-registry.c
src/bin/lttng-sessiond/buffer-registry.h
src/bin/lttng-sessiond/trace-ust.c
src/bin/lttng-sessiond/trace-ust.h
src/bin/lttng-sessiond/ust-app.c
src/bin/lttng-sessiond/ust-app.h

index e64e4375ed139ab0c51d2f300a6dd47b96a4ebfc..93da2f12253270c54856bc9fe303ff392141d260 100644 (file)
@@ -104,7 +104,7 @@ void buffer_reg_init_uid_registry(void)
  *
  * Return 0 on success else a negative value and regp is untouched.
  */
-int buffer_reg_uid_create(int session_id, uint32_t bits_per_long, uid_t uid,
+int buffer_reg_uid_create(uint64_t session_id, uint32_t bits_per_long, uid_t uid,
                enum lttng_domain_type domain, struct buffer_reg_uid **regp)
 {
        int ret = 0;
@@ -140,7 +140,7 @@ int buffer_reg_uid_create(int session_id, uint32_t bits_per_long, uid_t uid,
        cds_lfht_node_init(&reg->node.node);
        *regp = reg;
 
-       DBG3("Buffer registry per UID created id: %d, ABI: %u, uid: %d, domain: %d",
+       DBG3("Buffer registry per UID created id: %" PRIu64 ", ABI: %u, uid: %d, domain: %d",
                        session_id, bits_per_long, uid, domain);
 
        return 0;
@@ -162,7 +162,7 @@ void buffer_reg_uid_add(struct buffer_reg_uid *reg)
 
        assert(reg);
 
-       DBG3("Buffer registry per UID adding to global registry with id: %d",
+       DBG3("Buffer registry per UID adding to global registry with id: %" PRIu64 ,
                        reg->session_id);
 
        rcu_read_lock();
@@ -178,7 +178,7 @@ void buffer_reg_uid_add(struct buffer_reg_uid *reg)
  *
  * Return the object pointer or NULL on error.
  */
-struct buffer_reg_uid *buffer_reg_uid_find(int session_id,
+struct buffer_reg_uid *buffer_reg_uid_find(uint64_t session_id,
                uint32_t bits_per_long, uid_t uid)
 {
        struct lttng_ht_node_u64 *node;
@@ -191,7 +191,7 @@ struct buffer_reg_uid *buffer_reg_uid_find(int session_id,
        key.bits_per_long = bits_per_long;
        key.uid = uid;
 
-       DBG3("Buffer registry per UID find id: %d, ABI: %u, uid: %d",
+       DBG3("Buffer registry per UID find id: %" PRIu64 ", ABI: %u, uid: %d",
                        session_id, bits_per_long, uid);
 
        /* Custom lookup function since it's a different key. */
@@ -214,7 +214,7 @@ void buffer_reg_init_pid_registry(void)
 {
        /* Should be called once. */
        assert(!buffer_registry_pid);
-       buffer_registry_pid = lttng_ht_new(0, LTTNG_HT_TYPE_ULONG);
+       buffer_registry_pid = lttng_ht_new(0, LTTNG_HT_TYPE_U64);
        assert(buffer_registry_pid);
 
        DBG3("Global buffer per PID registry initialized");
@@ -225,7 +225,7 @@ void buffer_reg_init_pid_registry(void)
  *
  * Return 0 on success else a negative value and regp is untouched.
  */
-int buffer_reg_pid_create(int session_id, struct buffer_reg_pid **regp)
+int buffer_reg_pid_create(uint64_t session_id, struct buffer_reg_pid **regp)
 {
        int ret = 0;
        struct buffer_reg_pid *reg = NULL;
@@ -255,10 +255,11 @@ int buffer_reg_pid_create(int session_id, struct buffer_reg_pid **regp)
                goto error_session;
        }
 
-       lttng_ht_node_init_ulong(&reg->node, reg->session_id);
+       lttng_ht_node_init_u64(&reg->node, reg->session_id);
        *regp = reg;
 
-       DBG3("Buffer registry per PID created with session id: %d", session_id);
+       DBG3("Buffer registry per PID created with session id: %" PRIu64,
+                       session_id);
 
        return 0;
 
@@ -276,11 +277,11 @@ void buffer_reg_pid_add(struct buffer_reg_pid *reg)
 {
        assert(reg);
 
-       DBG3("Buffer registry per PID adding to global registry with id: %d",
+       DBG3("Buffer registry per PID adding to global registry with id: %" PRIu64,
                        reg->session_id);
 
        rcu_read_lock();
-       lttng_ht_add_unique_ulong(buffer_registry_pid, &reg->node);
+       lttng_ht_add_unique_u64(buffer_registry_pid, &reg->node);
        rcu_read_unlock();
 }
 
@@ -290,17 +291,17 @@ void buffer_reg_pid_add(struct buffer_reg_pid *reg)
  *
  * Return the object pointer or NULL on error.
  */
-struct buffer_reg_pid *buffer_reg_pid_find(int session_id)
+struct buffer_reg_pid *buffer_reg_pid_find(uint64_t session_id)
 {
-       struct lttng_ht_node_ulong *node;
+       struct lttng_ht_node_u64 *node;
        struct lttng_ht_iter iter;
        struct buffer_reg_pid *reg = NULL;
        struct lttng_ht *ht = buffer_registry_pid;
 
-       DBG3("Buffer registry per PID find id: %d", session_id);
+       DBG3("Buffer registry per PID find id: %" PRIu64, session_id);
 
-       lttng_ht_lookup(ht, (void *)((unsigned long) session_id), &iter);
-       node = lttng_ht_iter_get_node_ulong(&iter);
+       lttng_ht_lookup(ht, &session_id, &iter);
+       node = lttng_ht_iter_get_node_u64(&iter);
        if (!node) {
                goto end;
        }
@@ -594,8 +595,8 @@ static void rcu_free_buffer_reg_uid(struct rcu_head *head)
 
 static void rcu_free_buffer_reg_pid(struct rcu_head *head)
 {
-       struct lttng_ht_node_ulong *node =
-               caa_container_of(head, struct lttng_ht_node_ulong, head);
+       struct lttng_ht_node_u64 *node =
+               caa_container_of(head, struct lttng_ht_node_u64, head);
        struct buffer_reg_pid *reg =
                caa_container_of(node, struct buffer_reg_pid, node);
 
@@ -617,7 +618,7 @@ void buffer_reg_uid_destroy(struct buffer_reg_uid *regp,
                return;
        }
 
-       DBG3("Buffer registry per UID destroy with id: %d, ABI: %u, uid: %d",
+       DBG3("Buffer registry per UID destroy with id: %" PRIu64 ", ABI: %u, uid: %d",
                        regp->session_id, regp->bits_per_long, regp->uid);
 
        if (!consumer) {
@@ -679,7 +680,8 @@ void buffer_reg_pid_destroy(struct buffer_reg_pid *regp)
                return;
        }
 
-       DBG3("Buffer registry per PID destroy with id: %d", regp->session_id);
+       DBG3("Buffer registry per PID destroy with id: %" PRIu64,
+                       regp->session_id);
 
        /* This registry is only used by UST. */
        call_rcu(&regp->node.head, rcu_free_buffer_reg_pid);
index d77a07187b8e417359eddbec99a49ea2af0ccf57..cb976dcdc3db25609bb32838a8abe50266908439 100644 (file)
@@ -71,7 +71,7 @@ struct buffer_reg_uid {
         * Keys to match this object in a hash table. The following three variables
         * identify a unique per UID buffer registry.
         */
-       int session_id;         /* Unique tracing session id. */
+       uint64_t session_id;    /* Unique tracing session id. */
        int bits_per_long;      /* ABI */
        uid_t uid;                      /* Owner. */
 
@@ -88,20 +88,20 @@ struct buffer_reg_uid {
  * Registry object for per PID buffers.
  */
 struct buffer_reg_pid {
-       int session_id;
+       uint64_t session_id;
 
        struct buffer_reg_session *registry;
 
        /* Indexed by session id. */
-       struct lttng_ht_node_ulong node;
+       struct lttng_ht_node_u64 node;
 };
 
 /* Buffer registry per UID. */
 void buffer_reg_init_uid_registry(void);
-int buffer_reg_uid_create(int session_id, uint32_t bits_per_long, uid_t uid,
+int buffer_reg_uid_create(uint64_t session_id, uint32_t bits_per_long, uid_t uid,
                enum lttng_domain_type domain, struct buffer_reg_uid **regp);
 void buffer_reg_uid_add(struct buffer_reg_uid *reg);
-struct buffer_reg_uid *buffer_reg_uid_find(int session_id,
+struct buffer_reg_uid *buffer_reg_uid_find(uint64_t session_id,
                uint32_t bits_per_long, uid_t uid);
 void buffer_reg_uid_remove(struct buffer_reg_uid *regp);
 void buffer_reg_uid_destroy(struct buffer_reg_uid *regp,
@@ -109,9 +109,9 @@ void buffer_reg_uid_destroy(struct buffer_reg_uid *regp,
 
 /* Buffer registry per PID. */
 void buffer_reg_init_pid_registry(void);
-int buffer_reg_pid_create(int session_id, struct buffer_reg_pid **regp);
+int buffer_reg_pid_create(uint64_t session_id, struct buffer_reg_pid **regp);
 void buffer_reg_pid_add(struct buffer_reg_pid *reg);
-struct buffer_reg_pid *buffer_reg_pid_find(int session_id);
+struct buffer_reg_pid *buffer_reg_pid_find(uint64_t session_id);
 void buffer_reg_pid_remove(struct buffer_reg_pid *regp);
 void buffer_reg_pid_destroy(struct buffer_reg_pid *regp);
 
index 2c63ef0b5e65f7149e28eca47d6730cfeee3c9aa..65fe84b7d37617a17d3d4a68130d2138158f1a8d 100644 (file)
@@ -20,6 +20,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#include <inttypes.h>
 
 #include <common/common.h>
 #include <common/defaults.h>
@@ -181,7 +182,7 @@ error:
  *
  * Return pointer to structure or NULL.
  */
-struct ltt_ust_session *trace_ust_create_session(unsigned int session_id)
+struct ltt_ust_session *trace_ust_create_session(uint64_t session_id)
 {
        struct ltt_ust_session *lus;
 
@@ -646,7 +647,7 @@ void trace_ust_destroy_session(struct ltt_ust_session *session)
 
        assert(session);
 
-       DBG2("Trace UST destroy session %u", session->id);
+       DBG2("Trace UST destroy session %" PRIu64, session->id);
 
        /* Cleaning up UST domain */
        destroy_domain_global(&session->domain_global);
index 03f37abaa6900723422fca8762bf5ea893d020a7..0dac36b213f5d76f7f82c4c1b8c677e5d3b79c0e 100644 (file)
@@ -79,7 +79,7 @@ struct ltt_ust_domain_global {
 
 /* UST session */
 struct ltt_ust_session {
-       int id;    /* Unique identifier of session */
+       uint64_t id;    /* Unique identifier of session */
        int start_trace;
        struct ltt_ust_domain_global domain_global;
        /* UID/GID of the user owning the session */
@@ -155,7 +155,7 @@ struct ltt_ust_channel *trace_ust_find_channel_by_name(struct lttng_ht *ht,
 /*
  * Create functions malloc() the data structure.
  */
-struct ltt_ust_session *trace_ust_create_session(unsigned int session_id);
+struct ltt_ust_session *trace_ust_create_session(uint64_t session_id);
 struct ltt_ust_channel *trace_ust_create_channel(struct lttng_channel *attr);
 struct ltt_ust_event *trace_ust_create_event(struct lttng_event *ev,
                struct lttng_filter_bytecode *filter);
index e457cae6803f2ef43491a580ab0f6501171c7494..2d7a81f1a1dc130afd12aad38758f664542b7ec3 100644 (file)
 #include "ust-ctl.h"
 #include "utils.h"
 
-/* Next available channel key. */
-static unsigned long next_channel_key;
-static unsigned long next_session_id;
+/* Next available channel key. Access under next_channel_key_lock. */
+static uint64_t _next_channel_key;
+static pthread_mutex_t next_channel_key_lock = PTHREAD_MUTEX_INITIALIZER;
+
+/* Next available session ID. Access under next_session_id_lock. */
+static uint64_t _next_session_id;
+static pthread_mutex_t next_session_id_lock = PTHREAD_MUTEX_INITIALIZER;
 
 /*
- * Return the atomically incremented value of next_channel_key.
+ * Return the incremented value of next_channel_key.
  */
-static inline unsigned long get_next_channel_key(void)
+static uint64_t get_next_channel_key(void)
 {
-       return uatomic_add_return(&next_channel_key, 1);
+       uint64_t ret;
+
+       pthread_mutex_lock(&next_channel_key_lock);
+       ret = ++_next_channel_key;
+       pthread_mutex_unlock(&next_channel_key_lock);
+       return ret;
 }
 
 /*
  * Return the atomically incremented value of next_session_id.
  */
-static inline unsigned long get_next_session_id(void)
+static uint64_t get_next_session_id(void)
 {
-       return uatomic_add_return(&next_session_id, 1);
+       uint64_t ret;
+
+       pthread_mutex_lock(&next_session_id_lock);
+       ret = ++_next_session_id;
+       pthread_mutex_unlock(&next_session_id_lock);
+       return ret;
 }
 
 static void copy_channel_attr_to_ustctl(
@@ -1504,7 +1518,7 @@ void __lookup_session_by_app(struct ltt_ust_session *usess,
                        struct ust_app *app, struct lttng_ht_iter *iter)
 {
        /* Get right UST app session from app */
-       lttng_ht_lookup(app->sessions, (void *)((unsigned long) usess->id), iter);
+       lttng_ht_lookup(app->sessions, &usess->id, iter);
 }
 
 /*
@@ -1515,10 +1529,10 @@ static struct ust_app_session *lookup_session_by_app(
                struct ltt_ust_session *usess, struct ust_app *app)
 {
        struct lttng_ht_iter iter;
-       struct lttng_ht_node_ulong *node;
+       struct lttng_ht_node_u64 *node;
 
        __lookup_session_by_app(usess, app, &iter);
-       node = lttng_ht_iter_get_node_ulong(&iter);
+       node = lttng_ht_iter_get_node_u64(&iter);
        if (node == NULL) {
                goto error;
        }
@@ -1668,7 +1682,7 @@ static int create_ust_app_session(struct ltt_ust_session *usess,
 
        ua_sess = lookup_session_by_app(usess, app);
        if (ua_sess == NULL) {
-               DBG2("UST app pid: %d session id %d not found, creating it",
+               DBG2("UST app pid: %d session id %" PRIu64 " not found, creating it",
                                app->pid, usess->id);
                ua_sess = alloc_ust_app_session(app);
                if (ua_sess == NULL) {
@@ -1726,9 +1740,9 @@ static int create_ust_app_session(struct ltt_ust_session *usess,
                ua_sess->handle = ret;
 
                /* Add ust app session to app's HT */
-               lttng_ht_node_init_ulong(&ua_sess->node,
-                               (unsigned long) ua_sess->tracing_id);
-               lttng_ht_add_unique_ulong(app->sessions, &ua_sess->node);
+               lttng_ht_node_init_u64(&ua_sess->node,
+                               ua_sess->tracing_id);
+               lttng_ht_add_unique_u64(app->sessions, &ua_sess->node);
 
                DBG2("UST app session created successfully with handle %d", ret);
        }
@@ -1865,7 +1879,7 @@ static int enable_ust_app_channel(struct ust_app_session *ua_sess,
        lttng_ht_lookup(ua_sess->channels, (void *)uchan->name, &iter);
        ua_chan_node = lttng_ht_iter_get_node_str(&iter);
        if (ua_chan_node == NULL) {
-               DBG2("Unable to find channel %s in ust session id %u",
+               DBG2("Unable to find channel %s in ust session id %" PRIu64,
                                uchan->name, ua_sess->tracing_id);
                goto error;
        }
@@ -2720,7 +2734,7 @@ struct ust_app *ust_app_create(struct ust_register_msg *msg, int sock)
 
        lta->v_major = msg->major;
        lta->v_minor = msg->minor;
-       lta->sessions = lttng_ht_new(0, LTTNG_HT_TYPE_ULONG);
+       lta->sessions = lttng_ht_new(0, LTTNG_HT_TYPE_U64);
        lta->ust_objd = lttng_ht_new(0, LTTNG_HT_TYPE_ULONG);
        lta->notify_sock = -1;
 
@@ -3189,7 +3203,7 @@ int ust_app_disable_channel_glb(struct ltt_ust_session *usess,
                goto error;
        }
 
-       DBG2("UST app disabling channel %s from global domain for session id %d",
+       DBG2("UST app disabling channel %s from global domain for session id %" PRIu64,
                        uchan->name, usess->id);
 
        rcu_read_lock();
@@ -3250,7 +3264,7 @@ int ust_app_enable_channel_glb(struct ltt_ust_session *usess,
                goto error;
        }
 
-       DBG2("UST app enabling channel %s to global domain for session id %d",
+       DBG2("UST app enabling channel %s to global domain for session id %" PRIu64,
                        uchan->name, usess->id);
 
        rcu_read_lock();
@@ -3298,7 +3312,8 @@ int ust_app_disable_event_glb(struct ltt_ust_session *usess,
        struct ust_app_event *ua_event;
 
        DBG("UST app disabling event %s for all apps in channel "
-                       "%s for session id %d", uevent->attr.name, uchan->name, usess->id);
+                       "%s for session id %" PRIu64,
+                       uevent->attr.name, uchan->name, usess->id);
 
        rcu_read_lock();
 
@@ -3321,7 +3336,7 @@ int ust_app_disable_event_glb(struct ltt_ust_session *usess,
                lttng_ht_lookup(ua_sess->channels, (void *)uchan->name, &uiter);
                ua_chan_node = lttng_ht_iter_get_node_str(&uiter);
                if (ua_chan_node == NULL) {
-                       DBG2("Channel %s not found in session id %d for app pid %d."
+                       DBG2("Channel %s not found in session id %" PRIu64 " for app pid %d."
                                        "Skipping", uchan->name, usess->id, app->pid);
                        continue;
                }
@@ -3364,7 +3379,7 @@ int ust_app_disable_all_event_glb(struct ltt_ust_session *usess,
        struct ust_app_event *ua_event;
 
        DBG("UST app disabling all event for all apps in channel "
-                       "%s for session id %d", uchan->name, usess->id);
+                       "%s for session id %" PRIu64, uchan->name, usess->id);
 
        rcu_read_lock();
 
@@ -3422,7 +3437,7 @@ int ust_app_create_channel_glb(struct ltt_ust_session *usess,
        assert(usess);
        assert(uchan);
 
-       DBG2("UST app adding channel %s to UST domain for session id %d",
+       DBG2("UST app adding channel %s to UST domain for session id %" PRIu64,
                        uchan->name, usess->id);
 
        rcu_read_lock();
@@ -3502,7 +3517,7 @@ int ust_app_enable_event_glb(struct ltt_ust_session *usess,
        struct ust_app_channel *ua_chan;
        struct ust_app_event *ua_event;
 
-       DBG("UST app enabling event %s for all apps for session id %d",
+       DBG("UST app enabling event %s for all apps for session id %" PRIu64,
                        uevent->attr.name, usess->id);
 
        /*
@@ -3575,7 +3590,7 @@ int ust_app_create_event_glb(struct ltt_ust_session *usess,
        struct ust_app_session *ua_sess;
        struct ust_app_channel *ua_chan;
 
-       DBG("UST app creating event %s for all apps for session id %d",
+       DBG("UST app creating event %s for all apps for session id %" PRIu64,
                        uevent->attr.name, usess->id);
 
        rcu_read_lock();
@@ -3862,7 +3877,7 @@ static int destroy_trace(struct ltt_ust_session *usess, struct ust_app *app)
        int ret;
        struct ust_app_session *ua_sess;
        struct lttng_ht_iter iter;
-       struct lttng_ht_node_ulong *node;
+       struct lttng_ht_node_u64 *node;
 
        DBG("Destroy tracing for ust app pid %d", app->pid);
 
@@ -3873,7 +3888,7 @@ static int destroy_trace(struct ltt_ust_session *usess, struct ust_app *app)
        }
 
        __lookup_session_by_app(usess, app, &iter);
-       node = lttng_ht_iter_get_node_ulong(&iter);
+       node = lttng_ht_iter_get_node_u64(&iter);
        if (node == NULL) {
                /* Session is being or is deleted. */
                goto end;
@@ -4036,7 +4051,7 @@ void ust_app_global_update(struct ltt_ust_session *usess, int sock)
        assert(usess);
        assert(sock >= 0);
 
-       DBG2("UST app global update for app sock %d for session id %d", sock,
+       DBG2("UST app global update for app sock %d for session id %" PRIu64, sock,
                        usess->id);
 
        rcu_read_lock();
index 74d4cd6a2619c40d4b9acd52dbcc12049b34f241..9116a2192fdbaa2c4ac920c6bce3e7b95e1c2089 100644 (file)
@@ -175,10 +175,10 @@ struct ust_app_session {
         * Tracing session ID. Multiple ust app session can have the same tracing
         * session id making this value NOT unique to the object.
         */
-       int tracing_id;
+       uint64_t tracing_id;
        uint64_t id;    /* Unique session identifier */
        struct lttng_ht *channels; /* Registered channels */
-       struct lttng_ht_node_ulong node;
+       struct lttng_ht_node_u64 node;
        char path[PATH_MAX];
        /* UID/GID of the application owning the session */
        uid_t uid;
This page took 0.047272 seconds and 5 git commands to generate.