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; }