Get latest changes from upstream
This commit is contained in:
@@ -10,19 +10,15 @@ DN_API void DN_LeakTrackAlloc_(DN_LeakTracker *leak, void *ptr, DN_USize size, b
|
||||
return;
|
||||
|
||||
DN_TicketMutex_Begin(&leak->alloc_table_mutex);
|
||||
DN_DEFER
|
||||
{
|
||||
DN_TicketMutex_End(&leak->alloc_table_mutex);
|
||||
};
|
||||
|
||||
DN_Str8 stack_trace = DN_StackTraceWalkStr8FromHeap(128, 3 /*skip*/);
|
||||
DN_Str8 stack_trace = DN_Str8FromStackTraceNowHeap(128, 3 /*skip*/);
|
||||
DN_DSMap<DN_LeakAlloc> *alloc_table = &leak->alloc_table;
|
||||
DN_DSMapResult<DN_LeakAlloc> alloc_entry = DN_DSMapMakeKeyU64(alloc_table, DN_Cast(DN_U64) ptr);
|
||||
DN_LeakAlloc *alloc = alloc_entry.value;
|
||||
if (alloc_entry.found) {
|
||||
if ((alloc->flags & DN_LeakAllocFlag_Freed) == 0) {
|
||||
DN_Str8x32 alloc_size = DN_ByteCountStr8x32(alloc->size);
|
||||
DN_Str8x32 new_alloc_size = DN_ByteCountStr8x32(size);
|
||||
DN_Str8x32 alloc_size = DN_Str8x32FromByteCountU64Auto(alloc->size);
|
||||
DN_Str8x32 new_alloc_size = DN_Str8x32FromByteCountU64Auto(size);
|
||||
DN_HardAssertF(
|
||||
alloc->flags & DN_LeakAllocFlag_Freed,
|
||||
"This pointer is already in the leak tracker, however it has not been freed yet. This "
|
||||
@@ -58,6 +54,7 @@ DN_API void DN_LeakTrackAlloc_(DN_LeakTracker *leak, void *ptr, DN_USize size, b
|
||||
alloc->stack_trace = stack_trace;
|
||||
alloc->flags |= leak_permitted ? DN_LeakAllocFlag_LeakPermitted : 0;
|
||||
leak->alloc_table_bytes_allocated_for_stack_traces += alloc->stack_trace.size;
|
||||
DN_TicketMutex_End(&leak->alloc_table_mutex);
|
||||
}
|
||||
|
||||
DN_API void DN_LeakTrackDealloc_(DN_LeakTracker *leak, void *ptr)
|
||||
@@ -66,12 +63,8 @@ DN_API void DN_LeakTrackDealloc_(DN_LeakTracker *leak, void *ptr)
|
||||
return;
|
||||
|
||||
DN_TicketMutex_Begin(&leak->alloc_table_mutex);
|
||||
DN_DEFER
|
||||
{
|
||||
DN_TicketMutex_End(&leak->alloc_table_mutex);
|
||||
};
|
||||
|
||||
DN_Str8 stack_trace = DN_StackTraceWalkStr8FromHeap(128, 3 /*skip*/);
|
||||
DN_Str8 stack_trace = DN_Str8FromStackTraceNowHeap(128, 3 /*skip*/);
|
||||
DN_DSMap<DN_LeakAlloc> *alloc_table = &leak->alloc_table;
|
||||
DN_DSMapResult<DN_LeakAlloc> alloc_entry = DN_DSMapFindKeyU64(alloc_table, DN_Cast(uintptr_t) ptr);
|
||||
DN_HardAssertF(alloc_entry.found,
|
||||
@@ -82,7 +75,7 @@ DN_API void DN_LeakTrackDealloc_(DN_LeakTracker *leak, void *ptr)
|
||||
|
||||
DN_LeakAlloc *alloc = alloc_entry.value;
|
||||
if (alloc->flags & DN_LeakAllocFlag_Freed) {
|
||||
DN_Str8x32 freed_size = DN_ByteCountStr8x32(alloc->freed_size);
|
||||
DN_Str8x32 freed_size = DN_Str8x32FromByteCountU64Auto(alloc->freed_size);
|
||||
DN_HardAssertF((alloc->flags & DN_LeakAllocFlag_Freed) == 0,
|
||||
"Double free detected, pointer to free was already marked "
|
||||
"as freed. Either the pointer was reallocated but not "
|
||||
@@ -110,6 +103,7 @@ DN_API void DN_LeakTrackDealloc_(DN_LeakTracker *leak, void *ptr)
|
||||
alloc->flags |= DN_LeakAllocFlag_Freed;
|
||||
alloc->freed_stack_trace = stack_trace;
|
||||
leak->alloc_table_bytes_allocated_for_stack_traces += alloc->freed_stack_trace.size;
|
||||
DN_TicketMutex_End(&leak->alloc_table_mutex);
|
||||
}
|
||||
|
||||
DN_API void DN_LeakDump_(DN_LeakTracker *leak)
|
||||
@@ -124,7 +118,7 @@ DN_API void DN_LeakDump_(DN_LeakTracker *leak)
|
||||
if (alloc_leaked && !leak_permitted) {
|
||||
leaked_bytes += alloc->size;
|
||||
leak_count++;
|
||||
DN_Str8x32 alloc_size = DN_ByteCountStr8x32(alloc->size);
|
||||
DN_Str8x32 alloc_size = DN_Str8x32FromByteCountU64Auto(alloc->size);
|
||||
DN_LogWarningF(
|
||||
"Pointer (0x%p) leaked %.*s at:\n"
|
||||
"%.*s",
|
||||
@@ -135,7 +129,7 @@ DN_API void DN_LeakDump_(DN_LeakTracker *leak)
|
||||
}
|
||||
|
||||
if (leak_count) {
|
||||
DN_Str8x32 leak_size = DN_ByteCountStr8x32(leaked_bytes);
|
||||
DN_Str8x32 leak_size = DN_Str8x32FromByteCountU64Auto(leaked_bytes);
|
||||
DN_LogWarningF("There were %I64u leaked allocations totalling %.*s", leak_count, DN_Str8PrintFmt(leak_size));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user