a85966ca84ee53d7b78f16bd580465d4acbc3b9e
[babeltrace.git] / src / plugins / ctf / fs-sink / fs-sink-trace.hpp
1 /*
2 * SPDX-License-Identifier: MIT
3 *
4 * Copyright 2019 Philippe Proulx <pproulx@efficios.com>
5 */
6
7 #ifndef BABELTRACE_PLUGIN_CTF_FS_SINK_FS_SINK_TRACE_H
8 #define BABELTRACE_PLUGIN_CTF_FS_SINK_FS_SINK_TRACE_H
9
10 #include <glib.h>
11
12 #include <babeltrace2/babeltrace.h>
13
14 struct fs_sink_comp;
15 struct fs_sink_ctf_trace;
16
17 struct fs_sink_trace
18 {
19 bt_logging_level log_level = BT_LOGGING_LEVEL_NONE;
20 fs_sink_comp *fs_sink = nullptr;
21
22 /* Owned by this */
23 fs_sink_ctf_trace *trace = nullptr;
24
25 /*
26 * Weak reference: this object does not own it, and `trace`
27 * above does not own its trace IR trace and trace class either.
28 * Instead, we add a "trace destruction" listener (in
29 * create_trace()) so that this object gets destroyed when the
30 * trace object is destroyed.
31 *
32 * Otherwise (with a strong reference), we would keep this trace
33 * object alive until the upstream message iterator ends. This
34 * could "leak" resources (memory, file descriptors) associated
35 * to traces and streams which otherwise would not exist.
36 */
37 const bt_trace *ir_trace = nullptr;
38
39 bt_listener_id ir_trace_destruction_listener_id = 0;
40
41 /* Trace's directory */
42 GString *path = nullptr;
43
44 /* `metadata` file path */
45 GString *metadata_path = nullptr;
46
47 /*
48 * Hash table of `const bt_stream *` (weak) to
49 * `struct fs_sink_stream *` (owned by hash table).
50 */
51 GHashTable *streams = nullptr;
52 };
53
54 struct fs_sink_trace *fs_sink_trace_create(struct fs_sink_comp *fs_sink, const bt_trace *ir_trace);
55
56 void fs_sink_trace_destroy(struct fs_sink_trace *trace);
57
58 #endif /* BABELTRACE_PLUGIN_CTF_FS_SINK_FS_SINK_TRACE_H */
This page took 0.035791 seconds and 3 git commands to generate.