CTF: Fix plugin cleanup

Handle cleanup of the CTF plugin correctly. The cleanup causes recursive
trace event so the plugin needs to handle this.

Change-Id: Id6f4c6efe95e51332a8be97fecdf7886ba173e43
Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
Reviewed-by: Hatem ElKharashy <hatem.elkharashy@qt.io>
(cherry picked from commit b652d9753bb474b3bc6c881dcb4b40a5a01ddcff)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Antti Määttä 2023-01-16 12:45:44 +02:00 committed by Qt Cherry-pick Bot
parent 93b15be524
commit c290537cd5
3 changed files with 22 additions and 1 deletions

View File

@ -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"));

View File

@ -80,6 +80,7 @@ public:
int eventId();
static QCtfLib *instance();
static void cleanup();
private:
static QCtfLibImpl *s_instance;
QHash<QString, QCtfTracePointPrivate *> m_eventPrivs;

View File

@ -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"