struct relay_stream *stream =
caa_container_of(head, struct relay_stream, rcu_node);
- ctf_trace_try_destroy(stream->ctf_trace);
-
free(stream->path_name);
free(stream->channel_name);
free(stream);
* lookup failure on the live thread side of a stream indicates
* that the viewer stream index received value should be used.
*/
+ pthread_mutex_lock(&stream->viewer_stream_rotation_lock);
vstream->total_index_received = stream->total_index_received;
+ vstream->tracefile_count_last = stream->tracefile_count_current;
+ vstream->close_write_flag = 1;
+ pthread_mutex_unlock(&stream->viewer_stream_rotation_lock);
}
/* Cleanup index of that stream. */
iter.iter.node = &stream->ctf_trace_node.node;
delret = lttng_ht_del(stream->ctf_traces_ht, &iter);
assert(!delret);
+
+ if (stream->ctf_trace) {
+ ctf_trace_try_destroy(stream->ctf_trace);
+ }
+
call_rcu(&stream->rcu_node, deferred_free_stream);
DBG("Closed tracefile %d from close stream", stream->fd);
}
* currently using and let it handle the fault.
*/
if (vstream->tracefile_count_current == new_id) {
+ pthread_mutex_lock(&vstream->overwrite_lock);
vstream->abort_flag = 1;
- vstream->close_write_flag = 1;
-
- ret = close(vstream->read_fd);
- if (ret < 0) {
- PERROR("close index");
- }
-
- ret = close(vstream->index_read_fd);
- if (ret < 0) {
- PERROR("close tracefile");
- }
+ pthread_mutex_unlock(&vstream->overwrite_lock);
DBG("Streaming side setting abort_flag on stream %s_%lu\n",
stream->channel_name, new_id);
} else if (vstream->tracefile_count_current ==
stream->tracefile_size, stream->tracefile_count,
relayd_uid, relayd_gid, stream->fd,
&(stream->tracefile_count_current), &stream->fd);
+ stream->total_index_received = 0;
pthread_mutex_unlock(&stream->viewer_stream_rotation_lock);
if (ret < 0) {
ERR("Rotating stream output file");