aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBernd Weimer <bernd.weimer@pelagicore.com>2020-03-06 11:32:55 +0100
committerBernd Weimer <bernd.weimer@pelagicore.com>2020-03-09 13:31:20 +0100
commit6dbb252ce1001fa6ab7c8281ff8a9e2c48acf91c (patch)
tree2531a798f8a34f4496688ddfbc0fdf78402c22ff
parent3cb8f05175090754815dae4fbd003549c2d792eb (diff)
Add API to unregister all DLT contexts
The new API unregisters all logging categories and their associated DLT context Ids. This can be used to change log levels: set new rules and unregister all contexts. Change-Id: I1a21dd49d3e3b21fd6f58a2316c60a6f25b29586 Reviewed-by: Dominik Holland <dominik.holland@qt.io>
-rw-r--r--src/geniviextras/qdltregistration.cpp26
-rw-r--r--src/geniviextras/qdltregistration.h1
-rw-r--r--src/geniviextras/qdltregistration_p.h1
3 files changed, 27 insertions, 1 deletions
diff --git a/src/geniviextras/qdltregistration.cpp b/src/geniviextras/qdltregistration.cpp
index bef94d1..4ba638a 100644
--- a/src/geniviextras/qdltregistration.cpp
+++ b/src/geniviextras/qdltregistration.cpp
@@ -151,6 +151,16 @@ void QDltRegistrationPrivate::registerCategory(CategoryInfo &info)
info.m_registered = true;
}
+void QDltRegistrationPrivate::unregisterCategories()
+{
+ for (auto it = m_categoryInfoHash.begin(); it != m_categoryInfoHash.end(); ++it) {
+ if (it.value().m_registered) {
+ DLT_UNREGISTER_CONTEXT(*it.value().m_context);
+ it.value().m_registered = false;
+ }
+ }
+}
+
void QDltRegistrationPrivate::registerApplication()
{
Q_ASSERT_X(!m_dltAppID.isEmpty(), "registerApplication", "dltAppID needs to be a valid char * on the first call.");
@@ -431,7 +441,7 @@ void QDltRegistration::registerUnregisteredContexts()
for (auto it = d->m_categoryInfoHash.begin(); it != d->m_categoryInfoHash.end(); ++it) {
if (!it.value().m_registered) {
d->registerCategory(it.value());
- }
+ }
}
}
@@ -459,6 +469,20 @@ void QDltRegistration::unregisterApplication()
}
/*!
+ Unregisters all categories and their associated context Ids from the dlt-daemon.
+
+ One application of this function could be to update the log level: after this function has been
+ called, all cetegories will be registered again (with new log level), when they are used next
+ time.
+*/
+void QDltRegistration::unregisterCategories()
+{
+ Q_D(QDltRegistration);
+ QMutexLocker l(&d->m_mutex);
+ d->unregisterCategories();
+}
+
+/*!
The Qt message handler which forwards all the logging messages to the dlt-daemon.
The function will map \a msgTypes to the appropriate dlt log level and forward the \a msg to
diff --git a/src/geniviextras/qdltregistration.h b/src/geniviextras/qdltregistration.h
index 931d164..5afcddc 100644
--- a/src/geniviextras/qdltregistration.h
+++ b/src/geniviextras/qdltregistration.h
@@ -75,6 +75,7 @@ public:
void unregisterApplication();
void registerCategory(const QLoggingCategory *category, const char *dltCtxName, const char *dltCtxDescription);
+ void unregisterCategories();
void setDefaultContext(const char *categoryName);
void setRegisterContextOnFirstUseEnabled(bool enabled);
diff --git a/src/geniviextras/qdltregistration_p.h b/src/geniviextras/qdltregistration_p.h
index 98542f4..72a12f6 100644
--- a/src/geniviextras/qdltregistration_p.h
+++ b/src/geniviextras/qdltregistration_p.h
@@ -81,6 +81,7 @@ public:
void registerCategory(const QLoggingCategory *category, DltContext *dltContext, const char *dltCtxName, const char *dltCtxDescription);
void registerCategory(CategoryInfo &info);
+ void unregisterCategories();
void registerApplication();
void unregisterApplication();
void setDefaultCategory(const QString &category);