From d1e0e460a1c0039a0d9dc94a72818aec2bf138de Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Tue, 28 Nov 2017 15:59:07 +0100 Subject: [PATCH] hw: de-reference deleted kernel objects Fix #2591 --- repos/base-hw/src/core/kernel/object.cc | 8 ++++++-- repos/base-hw/src/core/kernel/object.h | 4 ++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/repos/base-hw/src/core/kernel/object.cc b/repos/base-hw/src/core/kernel/object.cc index fdd400613..9312961be 100644 --- a/repos/base-hw/src/core/kernel/object.cc +++ b/repos/base-hw/src/core/kernel/object.cc @@ -26,12 +26,16 @@ void Object_identity::invalidate() { for (Object_identity_reference * oir = first(); oir; oir = first()) oir->invalidate(); - _object.remove(this); + + if (_object) { + _object->remove(this); + _object = nullptr; + } } Object_identity::Object_identity(Object & object) -: _object(object) { _object.insert(this); } +: _object(&object) { _object->insert(this); } Object_identity::~Object_identity() { invalidate(); } diff --git a/repos/base-hw/src/core/kernel/object.h b/repos/base-hw/src/core/kernel/object.h index 9dc6bad88..55cce9a82 100644 --- a/repos/base-hw/src/core/kernel/object.h +++ b/repos/base-hw/src/core/kernel/object.h @@ -83,7 +83,7 @@ class Kernel::Object_identity { private: - Object & _object; + Object * _object = nullptr; public: @@ -91,7 +91,7 @@ class Kernel::Object_identity ~Object_identity(); template - KOBJECT * object() { return dynamic_cast(&_object); } + KOBJECT * object() { return dynamic_cast(_object); } void invalidate(); };