Author: bonefish Date: 2011-06-04 19:45:51 +0200 (Sat, 04 Jun 2011) New Revision: 41909 Changeset: https://dev.haiku-os.org/changeset/41909 Added: haiku/branches/developer/bonefish/signals/headers/private/kernel/util/KernelReferenceable.h haiku/branches/developer/bonefish/signals/src/system/kernel/util/KernelReferenceable.cpp Modified: haiku/branches/developer/bonefish/signals/src/system/kernel/util/Jamfile Log: Added class KernelReferenceable, a simple BReferenceable (and DeferredDeletable) subclass that reimplements LastReferenceReleased() to use deferred_delete() instead of delete, when interrupts are disabled. Added: haiku/branches/developer/bonefish/signals/headers/private/kernel/util/KernelReferenceable.h =================================================================== --- haiku/branches/developer/bonefish/signals/headers/private/kernel/util/KernelReferenceable.h (rev 0) +++ haiku/branches/developer/bonefish/signals/headers/private/kernel/util/KernelReferenceable.h 2011-06-04 17:45:51 UTC (rev 41909) @@ -0,0 +1,29 @@ +/* + * Copyright 2011, Ingo Weinhold, ingo_weinhold@xxxxxxx + * Distributed under the terms of the MIT License. + */ +#ifndef _KERNEL_UTIL_KERNEL_REFERENCEABLE_H +#define _KERNEL_UTIL_KERNEL_REFERENCEABLE_H + + +#include <Referenceable.h> + +#include <heap.h> + + +namespace BKernel { + + +struct KernelReferenceable : BReferenceable, DeferredDeletable { +protected: + virtual void LastReferenceReleased(); +}; + + +} // namespace BKernel + + +using BKernel::KernelReferenceable; + + +#endif /* _KERNEL_UTIL_KERNEL_REFERENCEABLE_H */ Modified: haiku/branches/developer/bonefish/signals/src/system/kernel/util/Jamfile =================================================================== --- haiku/branches/developer/bonefish/signals/src/system/kernel/util/Jamfile 2011-06-04 14:09:24 UTC (rev 41908) +++ haiku/branches/developer/bonefish/signals/src/system/kernel/util/Jamfile 2011-06-04 17:45:51 UTC (rev 41909) @@ -5,6 +5,7 @@ KernelMergeObject kernel_util.o : AVLTreeBase.cpp kernel_cpp.cpp + KernelReferenceable.cpp khash.cpp list.cpp queue.cpp Added: haiku/branches/developer/bonefish/signals/src/system/kernel/util/KernelReferenceable.cpp =================================================================== --- haiku/branches/developer/bonefish/signals/src/system/kernel/util/KernelReferenceable.cpp (rev 0) +++ haiku/branches/developer/bonefish/signals/src/system/kernel/util/KernelReferenceable.cpp 2011-06-04 17:45:51 UTC (rev 41909) @@ -0,0 +1,19 @@ +/* + * Copyright 2011, Ingo Weinhold, ingo_weinhold@xxxxxxx + * Distributed under the terms of the MIT License. + */ + + +#include <util/KernelReferenceable.h> + +#include <int.h> + + +void +KernelReferenceable::LastReferenceReleased() +{ + if (are_interrupts_enabled()) + delete this; + else + deferred_delete(this); +}