From 5e284bfb352d51ea487e534ac0532794860b7ce5 Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Thu, 12 Aug 2021 16:07:13 +0200 Subject: [PATCH] trace: disable tracing when owner disappears * Disable trace source and release ownership on subject destruction. * Note, since the policy module is also destroyed on descruction of the session component, the traced component must not access the policy module when acknowledging the disabled state (else: page fault). Fixes genodelabs/genode#4247 --- .../base/src/core/include/trace/subject_registry.h | 13 +++++++++++++ repos/base/src/lib/base/trace.cc | 6 ------ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/repos/base/src/core/include/trace/subject_registry.h b/repos/base/src/core/include/trace/subject_registry.h index 0b76bc1b50..267756845c 100644 --- a/repos/base/src/core/include/trace/subject_registry.h +++ b/repos/base/src/core/include/trace/subject_registry.h @@ -189,6 +189,19 @@ class Genode::Trace::Subject _label(label), _name(name) { } + /** + * Destructor, releases ownership of associated source + */ + ~Subject() + { + Locked_ptr source(_source); + + if (source.valid()) { + source->disable(); + source->release_ownership(*this); + } + } + /** * Return registry-local ID */ diff --git a/repos/base/src/lib/base/trace.cc b/repos/base/src/lib/base/trace.cc index 6c597b5571..d3d72321cb 100644 --- a/repos/base/src/lib/base/trace.cc +++ b/repos/base/src/lib/base/trace.cc @@ -60,11 +60,6 @@ bool Trace::Logger::_evaluate_control() /* unload policy */ if (policy_module) { - - /* revoke relocations */ - for (unsigned i = 0; i < sizeof(Trace::Policy_module)/sizeof(void *); i++) { - ((addr_t *)policy_module)[i] -= (addr_t)(policy_module); - } _env().rm().detach(policy_module); policy_module = 0; } @@ -81,7 +76,6 @@ bool Trace::Logger::_evaluate_control() } else if (control->to_be_enabled()) { - control->acknowledge_enabled(); enabled = true; }