init private data
[lttng-ust.git] / liblttng-ust / ltt-events.c
index fc7dfc7c78a7334f6676e8b6ac9b2242a3bae855..4c41531a6519c05d1373c53c43de738bbc98b952 100644 (file)
@@ -293,9 +293,10 @@ struct ltt_channel *ltt_channel_create(struct ltt_session *session,
                                       unsigned int switch_timer_interval,
                                       unsigned int read_timer_interval,
                                       int *shm_fd, int *wait_fd,
-                                      uint64_t *memory_map_size)
+                                      uint64_t *memory_map_size,
+                                      struct ltt_channel *chan_priv_init)
 {
-       struct ltt_channel *chan;
+       struct ltt_channel *chan = NULL;
        struct ltt_transport *transport;
 
        if (session->been_active)
@@ -306,21 +307,18 @@ struct ltt_channel *ltt_channel_create(struct ltt_session *session,
                       transport_name);
                goto notransport;
        }
-       chan = zmalloc(sizeof(struct ltt_channel));
-       if (!chan)
-               goto nomem;
-       chan->session = session;
-       chan->id = session->free_chan_id++;
+       chan_priv_init->id = session->free_chan_id++;
+       chan_priv_init->session = session;
        /*
         * Note: the channel creation op already writes into the packet
         * headers. Therefore the "chan" information used as input
         * should be already accessible.
         */
-       transport->ops.channel_create("[lttng]", chan, buf_addr,
+       chan = transport->ops.channel_create("[lttng]", buf_addr,
                        subbuf_size, num_subbuf, switch_timer_interval,
                        read_timer_interval, shm_fd, wait_fd,
-                       memory_map_size);
-       if (!chan->chan)
+                       memory_map_size, chan_priv_init);
+       if (!chan)
                goto create_error;
        chan->enabled = 1;
        chan->ops = &transport->ops;
@@ -328,8 +326,6 @@ struct ltt_channel *ltt_channel_create(struct ltt_session *session,
        return chan;
 
 create_error:
-       free(chan);
-nomem:
 notransport:
 active:
        return NULL;
@@ -341,10 +337,9 @@ active:
 static
 void _ltt_channel_destroy(struct ltt_channel *chan)
 {
-       chan->ops->channel_destroy(chan);
        cds_list_del(&chan->list);
        lttng_destroy_context(chan->ctx);
-       free(chan);
+       chan->ops->channel_destroy(chan);
 }
 
 /*
This page took 0.023818 seconds and 4 git commands to generate.