From 8818d810a145fa9cafe53cb686d23329259216a9 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Mon, 10 Mar 2014 23:21:07 +0100 Subject: [PATCH] hw: clean-up destruction of processor clients ref #1088 --- base-hw/src/core/kernel/kernel.cc | 3 --- base-hw/src/core/kernel/scheduler.h | 27 +++++++++++++++++++-------- base-hw/src/core/kernel/thread.cc | 2 -- base-hw/src/core/kernel/thread.h | 5 ----- 4 files changed, 19 insertions(+), 18 deletions(-) diff --git a/base-hw/src/core/kernel/kernel.cc b/base-hw/src/core/kernel/kernel.cc index df66b66c67..7cfa269363 100644 --- a/base-hw/src/core/kernel/kernel.cc +++ b/base-hw/src/core/kernel/kernel.cc @@ -315,9 +315,6 @@ Kernel::Mode_transition_control * Kernel::mtc() } -Kernel::Processor_client::~Processor_client() { } - - Kernel::Cpu_context::Cpu_context() { _init(STACK_SIZE); diff --git a/base-hw/src/core/kernel/scheduler.h b/base-hw/src/core/kernel/scheduler.h index b357439a1e..1960cba190 100644 --- a/base-hw/src/core/kernel/scheduler.h +++ b/base-hw/src/core/kernel/scheduler.h @@ -73,19 +73,19 @@ class Kernel::Double_list_item Double_list_item * _prev; Double_list * _list; + protected: + + /** + * Return wether this item is managed by a list currently + */ + bool _listed() const { return _list; } + public: /** * Constructor */ Double_list_item() : _next(0), _prev(0), _list(0) { } - - - /*************** - ** Accessors ** - ***************/ - - Double_list * list() { return _list; } }; template @@ -217,6 +217,13 @@ class Kernel::Scheduler_item : public Double_list::Item Priority const _priority; + protected: + + /** + * Return wether this item is managed by a scheduler currently + */ + bool _scheduled() const { return Double_list::Item::_listed(); } + public: /** @@ -370,7 +377,11 @@ class Kernel::Processor_client : public Processor_scheduler::Item /** * Destructor */ - virtual ~Processor_client(); + ~Processor_client() + { + if (!_scheduled()) { return; } + _unschedule(); + } }; #endif /* _KERNEL__SCHEDULER_H_ */ diff --git a/base-hw/src/core/kernel/thread.cc b/base-hw/src/core/kernel/thread.cc index 48bf1c4e9a..fc5289d3b2 100644 --- a/base-hw/src/core/kernel/thread.cc +++ b/base-hw/src/core/kernel/thread.cc @@ -189,8 +189,6 @@ Thread::Thread(unsigned const priority, char const * const label) cpu_exception = RESET; } -Thread::~Thread() { if (Processor_client::list()) { _unschedule(STOPPED); } } - void Thread::init(Processor * const processor, unsigned const pd_id_arg, diff --git a/base-hw/src/core/kernel/thread.h b/base-hw/src/core/kernel/thread.h index f8754ee356..e5a614808a 100644 --- a/base-hw/src/core/kernel/thread.h +++ b/base-hw/src/core/kernel/thread.h @@ -298,11 +298,6 @@ class Kernel::Thread */ Thread(unsigned const priority, char const * const label); - /** - * Destructor - */ - ~Thread(); - /** * Prepare thread to get scheduled the first time *