From 21c92a08d46268e191424b768584fb30527c219a Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Fri, 18 Jan 2008 02:04:04 +0000 Subject: [PATCH] * Don't invoke the TraceEntry destructor for simple buffer entries, since that's seriously unhealthy. * Added TODO that uninitialized entries must not be discarded. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23599 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/kernel/debug/tracing.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/system/kernel/debug/tracing.cpp b/src/system/kernel/debug/tracing.cpp index bf8055ab8c..b6461ccb43 100644 --- a/src/system/kernel/debug/tracing.cpp +++ b/src/system/kernel/debug/tracing.cpp @@ -70,7 +70,9 @@ make_space(size_t needed) return; while (true) { - TraceEntry* removed = (TraceEntry*)sBufferStart; + // TODO: If the entry is not ENTRY_INITIALIZED yet, we must not + // discard it, or the owner might overwrite memory we're allocating. + trace_entry* removed = sBufferStart; uint16 freed = sBufferStart->size; TRACE((" skip start %p, %u bytes\n", sBufferStart, freed)); @@ -79,7 +81,8 @@ make_space(size_t needed) sBufferStart = sBufferEnd; sEntries--; - removed->~TraceEntry(); + if (!(removed->flags & BUFFER_ENTRY)) + ((TraceEntry*)removed)->~TraceEntry(); if (needed <= freed) break;