send_stream.ctf_trace_id = htobe64(ctf_trace->id);
send_stream.metadata_flag = htobe32(
vstream->stream->is_metadata);
- strncpy(send_stream.path_name, vstream->path_name,
- sizeof(send_stream.path_name));
- strncpy(send_stream.channel_name, vstream->channel_name,
- sizeof(send_stream.channel_name));
+ if (lttng_strncpy(send_stream.path_name, vstream->path_name,
+ sizeof(send_stream.path_name))) {
+ pthread_mutex_unlock(&vstream->stream->lock);
+ viewer_stream_put(vstream);
+ ret = -1; /* Error. */
+ goto end_unlock;
+ }
+ if (lttng_strncpy(send_stream.channel_name,
+ vstream->channel_name,
+ sizeof(send_stream.channel_name))) {
+ pthread_mutex_unlock(&vstream->stream->lock);
+ viewer_stream_put(vstream);
+ ret = -1; /* Error. */
+ goto end_unlock;
+ }
DBG("Sending stream %" PRIu64 " to viewer",
vstream->stream->stream_handle);
* Ensure a self-reference is preserved even
* after we have put our local reference.
*/
- viewer_stream_get(vstream);
+ if (!viewer_stream_get(vstream)) {
+ ERR("Unable to get self-reference on viewer stream, logic error.");
+ abort();
+ }
} else {
if (!vstream->sent_flag && nb_unsent) {
/* Update number of unsent stream counter. */
}
/* Setup the dispatcher thread */
- ret = pthread_create(&live_dispatcher_thread, NULL,
+ ret = pthread_create(&live_dispatcher_thread, default_pthread_attr(),
thread_dispatcher, (void *) NULL);
if (ret) {
errno = ret;
}
/* Setup the worker thread */
- ret = pthread_create(&live_worker_thread, NULL,
+ ret = pthread_create(&live_worker_thread, default_pthread_attr(),
thread_worker, NULL);
if (ret) {
errno = ret;
}
/* Setup the listener thread */
- ret = pthread_create(&live_listener_thread, NULL,
+ ret = pthread_create(&live_listener_thread, default_pthread_attr(),
thread_listener, (void *) NULL);
if (ret) {
errno = ret;