diff --git a/src/corelib/tracing/qctflib.cpp b/src/corelib/tracing/qctflib.cpp index 2fbb02132fb..2992d5f5ce8 100644 --- a/src/corelib/tracing/qctflib.cpp +++ b/src/corelib/tracing/qctflib.cpp @@ -42,6 +42,12 @@ QCtfLib *QCtfLibImpl::instance() return s_instance; } +void QCtfLibImpl::cleanup() +{ + if (s_instance) + delete s_instance; +} + QCtfLibImpl::QCtfLibImpl() { QString location = QString::fromUtf8(qgetenv("QTRACE_LOCATION")); diff --git a/src/corelib/tracing/qctflib_p.h b/src/corelib/tracing/qctflib_p.h index 0f2838515c7..7d773d962d8 100644 --- a/src/corelib/tracing/qctflib_p.h +++ b/src/corelib/tracing/qctflib_p.h @@ -80,6 +80,7 @@ public: int eventId(); static QCtfLib *instance(); + static void cleanup(); private: static QCtfLibImpl *s_instance; QHash m_eventPrivs; diff --git a/src/corelib/tracing/qctfplugin.cpp b/src/corelib/tracing/qctfplugin.cpp index 4e966b32f85..db052fa6e0c 100644 --- a/src/corelib/tracing/qctfplugin.cpp +++ b/src/corelib/tracing/qctfplugin.cpp @@ -19,24 +19,38 @@ public: { } - ~QCtfTracePlugin() = default; + ~QCtfTracePlugin() + { + m_cleanup = true; + QCtfLibImpl::cleanup(); + } bool tracepointEnabled(const QCtfTracePointEvent &point) override { + if (m_cleanup) + return false; return QCtfLibImpl::instance()->tracepointEnabled(point); } void doTracepoint(const QCtfTracePointEvent &point, const QByteArray &arr) override { + if (m_cleanup) + return; QCtfLibImpl::instance()->doTracepoint(point, arr); } bool sessionEnabled() override { + if (m_cleanup) + return false; return QCtfLibImpl::instance()->sessionEnabled(); } QCtfTracePointPrivate *initializeTracepoint(const QCtfTracePointEvent &point) override { + if (m_cleanup) + return nullptr; return QCtfLibImpl::instance()->initializeTracepoint(point); } +private: + bool m_cleanup = false; }; #include "qctfplugin.moc"