+static void try_close_stream(struct relay_session *session,
+ struct relay_stream *stream)
+{
+ int ret;
+ struct ctf_trace *ctf_trace;
+
+ assert(session);
+ assert(stream);
+
+ if (!close_stream_check(stream)) {
+ /* Can't close it, not ready for that. */
+ goto end;
+ }
+
+ ctf_trace = ctf_trace_find_by_path(session->ctf_traces_ht,
+ stream->path_name);
+ assert(ctf_trace);
+
+ pthread_mutex_lock(&session->viewer_ready_lock);
+ ctf_trace->invalid_flag = 1;
+ pthread_mutex_unlock(&session->viewer_ready_lock);
+
+ ret = stream_close(session, stream);
+ if (!ret) {
+ /* Already close thus the ctf trace is being or has been destroyed. */
+ goto end;
+ }
+
+ ctf_trace_try_destroy(session, ctf_trace);
+
+end:
+ return;
+}
+