2 * SPDX-License-Identifier: MIT
4 * Copyright 2019 Philippe Proulx <pproulx@efficios.com>
7 #ifndef BABELTRACE_PLUGIN_CTF_FS_SINK_FS_SINK_TRACE_H
8 #define BABELTRACE_PLUGIN_CTF_FS_SINK_FS_SINK_TRACE_H
10 #include "common/macros.h"
11 #include <babeltrace2/babeltrace.h>
12 #include "ctfser/ctfser.h"
16 #include "fs-sink-ctf-meta.h"
20 struct fs_sink_trace
{
21 bt_logging_level log_level
;
22 struct fs_sink_comp
*fs_sink
;
25 struct fs_sink_ctf_trace
*trace
;
28 * Weak reference: this object does not own it, and `trace`
29 * above does not own its trace IR trace and trace class either.
30 * Instead, we add a "trace destruction" listener (in
31 * create_trace()) so that this object gets destroyed when the
32 * trace object is destroyed.
34 * Otherwise (with a strong reference), we would keep this trace
35 * object alive until the upstream message iterator ends. This
36 * could "leak" resources (memory, file descriptors) associated
37 * to traces and streams which otherwise would not exist.
39 const bt_trace
*ir_trace
;
41 bt_listener_id ir_trace_destruction_listener_id
;
43 /* Trace's directory */
46 /* `metadata` file path */
47 GString
*metadata_path
;
50 * Hash table of `const bt_stream *` (weak) to
51 * `struct fs_sink_stream *` (owned by hash table).
57 struct fs_sink_trace
*fs_sink_trace_create(struct fs_sink_comp
*fs_sink
,
58 const bt_trace
*ir_trace
);
61 void fs_sink_trace_destroy(struct fs_sink_trace
*trace
);
63 #endif /* BABELTRACE_PLUGIN_CTF_FS_SINK_FS_SINK_TRACE_H */