Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 11 additions & 4 deletions include/cgf_diagnostics.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,22 @@ namespace celerity::detail {
class cgf_diagnostics {
public:
static void make_available() {
assert(m_instance == nullptr);
assert(!m_is_available);
m_instance = std::unique_ptr<cgf_diagnostics>(new cgf_diagnostics());
m_is_available = true;
}

static bool is_available() { return m_instance != nullptr; }
static bool is_available() { return m_instance != nullptr && m_is_available; }

static void teardown() { m_instance.reset(); }
static void teardown() {
// We don't want to reset the instance, because that would cause destruction order issues.
// Instead, we just mark this instance as unavailable.
// m_instance is handled by the unique_ptr anyway, so it will be safely destroyed.
m_is_available = false;
}

static cgf_diagnostics& get_instance() {
assert(m_instance != nullptr);
assert(m_instance != nullptr && m_is_available);
return *m_instance;
}

Expand Down Expand Up @@ -64,6 +70,7 @@ class cgf_diagnostics {

private:
inline static thread_local std::unique_ptr<cgf_diagnostics> m_instance; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
inline static thread_local bool m_is_available; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)

bool m_is_checking = false;
std::optional<target> m_expected_target = std::nullopt;
Expand Down
Loading