ua_chan->handle = -1;
ua_chan->obj = NULL;
ua_chan->ctx = hashtable_new(0);
- ua_chan->streams = hashtable_new(0);
+ CDS_INIT_LIST_HEAD(&ua_chan->streams.head);
ua_chan->events = hashtable_new_str(0);
hashtable_node_init(&ua_chan->node, (void *) ua_chan->name,
strlen(ua_chan->name));
ua_chan = caa_container_of(ua_chan_node,
struct ust_app_channel, node);
- struct ltt_ust_stream *ustream;
+ for (;;) {
+ struct lttng_ust_object_data *obj;
+ struct ltt_ust_stream *ustream;
- ustream = malloc(sizeof(*ustream));
- if (ustream == NULL) {
- goto next_chan;
- }
-
- memset(ustream, 0, sizeof(struct ltt_ust_stream));
-
- ret = ustctl_create_stream(app->key.sock, ua_chan->obj,
- &ustream->obj);
- if (ret < 0) {
- ERR("Creating channel stream failed");
- goto next_chan;
- }
-
- ustream->handle = ustream->obj->handle;
-
- hashtable_node_init(&ustream->node,
- (void *)((unsigned long) ustream->handle), sizeof(void *));
- hashtable_add_unique(ua_chan->streams, &ustream->node);
+ ret = ustctl_create_stream(app->key.sock, ua_chan->obj,
+ &obj);
+ if (ret < 0) {
+ /* Got all streams */
+ goto next_chan;
+ }
- ret = snprintf(ustream->pathname, PATH_MAX, "%s/%s_%lu",
- uchan->pathname, uchan->name,
- hashtable_get_count(ua_chan->streams));
- if (ret < 0) {
- PERROR("asprintf UST create stream");
- goto next_chan;
+ ustream = malloc(sizeof(*ustream));
+ if (ustream == NULL) {
+ goto next_chan;
+ }
+ memset(ustream, 0, sizeof(struct ltt_ust_stream));
+ ustream->obj = obj;
+ ustream->handle = ustream->obj->handle;
+ /* Order is important */
+ cds_list_add_tail(&ustream->list, &ua_chan->streams.head);
+ ret = snprintf(ustream->pathname, PATH_MAX, "%s/%s_%u",
+ uchan->pathname, uchan->name,
+ ua_chan->streams.count++);
+ if (ret < 0) {
+ PERROR("asprintf UST create stream");
+ goto next_chan;
+ }
}
next_chan:
}
/* Setup UST consumer socket and send fds to it */
- printf("WTF HERE: sock: %d\n", usess->consumer_fd);
ret = ust_consumer_send_session(usess->consumer_fd, ua_sess);
if (ret < 0) {
goto next;