summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAntti Määttä <antti.maatta@qt.io>2023-01-16 12:45:44 +0200
committerAntti Määttä <antti.maatta@qt.io>2023-02-10 18:03:34 +0200
commitb652d9753bb474b3bc6c881dcb4b40a5a01ddcff (patch)
tree28dffdc915f919701c0f8da756ec8f5e40fcb7ea /src
parent29e739f93852dcf3d431bd944b3ec7ac5c7bf3fc (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.cpp6
-rw-r--r--src/corelib/tracing/qctflib_p.h1
-rw-r--r--src/corelib/tracing/qctfplugin.cpp16
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"