* Also updated by the signal handler (consumer_should_exit()). Read by the
* polling threads.
*/
-volatile int consumer_quit = 0;
+volatile int consumer_quit;
/*
* The following two hash tables are visible by all threads which are separated
* stream element in this ht should only be updated by the metadata poll thread
* for the metadata and the data poll thread for the data.
*/
-struct lttng_ht *metadata_ht = NULL;
-struct lttng_ht *data_ht = NULL;
+struct lttng_ht *metadata_ht;
+struct lttng_ht *data_ht;
/*
* Find a stream. The consumer_data.lock must be locked during this
lttng_consumer_sync_trace_file(stream, orig_offset);
end:
- pthread_mutex_unlock(&stream->lock);
/* Unlock only if ctrl socket used */
if (relayd && stream->metadata_flag) {
pthread_mutex_unlock(&relayd->ctrl_sock_mutex);
}
+ pthread_mutex_unlock(&stream->lock);
rcu_read_unlock();
return written;
}
end:
- pthread_mutex_unlock(&stream->lock);
if (relayd && stream->metadata_flag) {
pthread_mutex_unlock(&relayd->ctrl_sock_mutex);
}
+ pthread_mutex_unlock(&stream->lock);
rcu_read_unlock();
return written;
DBG("Consumer data available command on session id %" PRIu64, id);
+ rcu_read_lock();
pthread_mutex_lock(&consumer_data.lock);
switch (consumer_data.type) {
assert(0);
}
- rcu_read_lock();
-
/* Ease our life a bit */
ht = consumer_data.stream_list_ht;