From b652d9753bb474b3bc6c881dcb4b40a5a01ddcff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antti=20M=C3=A4=C3=A4tt=C3=A4?= Date: Mon, 16 Jan 2023 12:45:44 +0200 Subject: [PATCH] CTF: Fix plugin cleanup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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ää Reviewed-by: Hatem ElKharashy --- src/corelib/tracing/qctflib.cpp | 6 ++++++ src/corelib/tracing/qctflib_p.h | 1 + src/corelib/tracing/qctfplugin.cpp | 16 +++++++++++++++- 3 files changed, 22 insertions(+), 1 deletion(-) 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 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"