diff options
author | Antti Määttä <antti.maatta@qt.io> | 2023-01-16 12:45:44 +0200 |
---|---|---|
committer | Antti Määttä <antti.maatta@qt.io> | 2023-02-10 18:03:34 +0200 |
commit | b652d9753bb474b3bc6c881dcb4b40a5a01ddcff (patch) | |
tree | 28dffdc915f919701c0f8da756ec8f5e40fcb7ea /src | |
parent | 29e739f93852dcf3d431bd944b3ec7ac5c7bf3fc (diff) |
CTF: Fix plugin cleanup
Handle cleanup of the CTF plugin correctly. The cleanup causes recursive
trace event so the plugin needs to handle this.
Pick-to: 6.5
Change-Id: Id6f4c6efe95e51332a8be97fecdf7886ba173e43
Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
Reviewed-by: Hatem ElKharashy <hatem.elkharashy@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/corelib/tracing/qctflib.cpp | 6 | ||||
-rw-r--r-- | src/corelib/tracing/qctflib_p.h | 1 | ||||
-rw-r--r-- | src/corelib/tracing/qctfplugin.cpp | 16 |
3 files changed, 22 insertions, 1 deletions
diff --git a/src/corelib/tracing/qctflib.cpp b/src/corelib/tracing/qctflib.cpp index 2fbb02132f..2992d5f5ce 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 0f2838515c..7d773d962d 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<QString, QCtfTracePointPrivate *> m_eventPrivs; diff --git a/src/corelib/tracing/qctfplugin.cpp b/src/corelib/tracing/qctfplugin.cpp index 4e966b32f8..db052fa6e0 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" |