From 7315f47790653a616e347200a0425bd96760ef1c Mon Sep 17 00:00:00 2001 From: Mark Jansen Date: Thu, 27 Jul 2017 20:36:51 +0000 Subject: [PATCH 1/1] [APPHELP] Use DbgPrint instead of OutputDebugString + fix SDBAPI_DEBUG_ALLOC svn path=/trunk/; revision=75429 --- reactos/dll/appcompat/apphelp/CMakeLists.txt | 1 + reactos/dll/appcompat/apphelp/apphelp.c | 4 +-- reactos/dll/appcompat/apphelp/sdbapi.c | 33 +++++++++++++------- reactos/dll/appcompat/apphelp/sdbfileattr.c | 4 +-- reactos/dll/appcompat/apphelp/sdbwrite.c | 4 +-- 5 files changed, 29 insertions(+), 17 deletions(-) diff --git a/reactos/dll/appcompat/apphelp/CMakeLists.txt b/reactos/dll/appcompat/apphelp/CMakeLists.txt index 5caed2e8e83..0573391cea9 100644 --- a/reactos/dll/appcompat/apphelp/CMakeLists.txt +++ b/reactos/dll/appcompat/apphelp/CMakeLists.txt @@ -3,6 +3,7 @@ include_directories(${SHIMLIB_DIR}) remove_definitions(-D_WIN32_WINNT=0x502 -DWINVER=0x502) add_definitions(-D_WIN32_WINNT=0x601 -DWINVER=0x601) +#add_definitions(-DSDBAPI_DEBUG_ALLOC) spec2def(apphelp.dll apphelp.spec ADD_IMPORTLIB) diff --git a/reactos/dll/appcompat/apphelp/apphelp.c b/reactos/dll/appcompat/apphelp/apphelp.c index 90bc9fd5715..bcc14da5bf2 100644 --- a/reactos/dll/appcompat/apphelp/apphelp.c +++ b/reactos/dll/appcompat/apphelp/apphelp.c @@ -1,7 +1,7 @@ /* * Copyright 2011 André Hentschel * Copyright 2013 Mislav Blažević - * Copyright 2015-2017 Mark Jansen + * Copyright 2015-2017 Mark Jansen (mark.jansen@reactos.org) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -152,7 +152,7 @@ BOOL WINAPIV ShimDbgPrint(SHIM_LOG_LEVEL Level, PCSTR FunctionName, PCSTR Format #if defined(APPCOMPAT_USE_DBGPRINTEX) && APPCOMPAT_USE_DBGPRINTEX return NT_SUCCESS(DbgPrintEx(DPFLTR_APPCOMPAT_ID, Level, "%s", Buffer)); #else - OutputDebugStringA(Buffer); + DbgPrint("%s", Buffer); return TRUE; #endif } diff --git a/reactos/dll/appcompat/apphelp/sdbapi.c b/reactos/dll/appcompat/apphelp/sdbapi.c index 9f58b498bfe..036f0f98405 100644 --- a/reactos/dll/appcompat/apphelp/sdbapi.c +++ b/reactos/dll/appcompat/apphelp/sdbapi.c @@ -1,7 +1,7 @@ /* * Copyright 2011 André Hentschel * Copyright 2013 Mislav Blažević - * Copyright 2015,2016 Mark Jansen + * Copyright 2015-2017 Mark Jansen (mark.jansen@reactos.org) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -46,7 +46,7 @@ typedef struct SHIM_ALLOC_ENTRY PVOID Prev; } SHIM_ALLOC_ENTRY, *PSHIM_ALLOC_ENTRY; - +/* FIXME: This is not threadsafe */ static RTL_AVL_TABLE g_SdbpAllocationTable; @@ -109,12 +109,10 @@ static void SdbpUpdateAllocation(PVOID address, PVOID newaddress, SIZE_T size, i static void SdbpRemoveAllocation(PVOID address, int line, const char* file) { - char buf[512]; SHIM_ALLOC_ENTRY Lookup = {0}; PSHIM_ALLOC_ENTRY Entry; - sprintf(buf, "\r\n===============\r\n%s(%d): SdbpFree called, tracing alloc:\r\n", file, line); - OutputDebugStringA(buf); + DbgPrint("\r\n===============\r\n%s(%d): SdbpFree called, tracing alloc:\r\n", file, line); Lookup.Address = address; while (Lookup.Address) @@ -125,9 +123,8 @@ static void SdbpRemoveAllocation(PVOID address, int line, const char* file) Lookup = *Entry; RtlDeleteElementGenericTableAvl(&g_SdbpAllocationTable, Entry); - sprintf(buf, " > %s(%d): %s%sAlloc( %d ) ==> %p\r\n", Lookup.File, Lookup.Line, + DbgPrint(" > %s(%d): %s%sAlloc( %d ) ==> %p\r\n", Lookup.File, Lookup.Line, Lookup.Next ? "Invalidated " : "", Lookup.Prev ? "Re" : "", Lookup.Size, Lookup.Address); - OutputDebugStringA(buf); Lookup.Address = Lookup.Prev; } else @@ -135,8 +132,7 @@ static void SdbpRemoveAllocation(PVOID address, int line, const char* file) Lookup.Address = NULL; } } - sprintf(buf, "\r\n===============\r\n"); - OutputDebugStringA(buf); + DbgPrint("===============\r\n"); } #endif @@ -155,7 +151,22 @@ void SdbpHeapDeinit(void) { #if SDBAPI_DEBUG_ALLOC if (g_SdbpAllocationTable.NumberGenericTableElements != 0) - __debugbreak(); + { + PSHIM_ALLOC_ENTRY Entry; + + DbgPrint("\r\n===============\r\n===============\r\nSdbpHeapDeinit: Dumping leaks\r\n"); + Entry = RtlEnumerateGenericTableAvl(&g_SdbpAllocationTable, TRUE); + + while (Entry) + { + DbgPrint(" > %s(%d): %s%sAlloc( %d ) ==> %p\r\n", Entry->File, Entry->Line, + Entry->Next ? "Invalidated " : "", Entry->Prev ? "Re" : "", Entry->Size, Entry->Address); + + Entry = RtlEnumerateGenericTableAvl(&g_SdbpAllocationTable, FALSE); + } + DbgPrint("===============\r\n===============\r\n"); + } + /*__debugbreak();*/ #endif HeapDestroy(g_Heap); } @@ -267,7 +278,7 @@ DWORD SdbpStrsize(PCWSTR string) PWSTR SdbpStrDup(LPCWSTR string) { - PWSTR ret = SdbpAlloc(SdbpStrsize(string)); + PWSTR ret = SdbAlloc(SdbpStrsize(string)); lstrcpyW(ret, string); return ret; } diff --git a/reactos/dll/appcompat/apphelp/sdbfileattr.c b/reactos/dll/appcompat/apphelp/sdbfileattr.c index 2032e11df73..3ac67607578 100644 --- a/reactos/dll/appcompat/apphelp/sdbfileattr.c +++ b/reactos/dll/appcompat/apphelp/sdbfileattr.c @@ -1,7 +1,7 @@ /* * Copyright 2011 André Hentschel * Copyright 2013 Mislav Blaževic - * Copyright 2015 Mark Jansen + * Copyright 2015-2017 Mark Jansen (mark.jansen@reactos.org) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -97,7 +97,7 @@ static void WINAPI SdbpSetStringAttrFromAnsiString(PATTRINFO attr, TAG tag, PBYT attr->type = tag; attr->flags = ATTRIBUTE_AVAILABLE; - dest = attr->lpattr = SdbpAlloc((len+1) * sizeof(WCHAR)); + dest = attr->lpattr = SdbAlloc((len+1) * sizeof(WCHAR)); while (len--) *(dest++) = *(string++); *dest = 0; diff --git a/reactos/dll/appcompat/apphelp/sdbwrite.c b/reactos/dll/appcompat/apphelp/sdbwrite.c index 1ee1b0a7625..1f68c2fb011 100644 --- a/reactos/dll/appcompat/apphelp/sdbwrite.c +++ b/reactos/dll/appcompat/apphelp/sdbwrite.c @@ -1,7 +1,7 @@ /* * Copyright 2011 André Hentschel * Copyright 2013 Mislav Blažević - * Copyright 2015,2016 Mark Jansen + * Copyright 2015-2017 Mark Jansen (mark.jansen@reactos.org) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -62,7 +62,7 @@ static BOOL WINAPI SdbpGetOrAddStringRef(PDB db, LPCWSTR string, TAGID* tagid) PDB buf = db->string_buffer; if (db->string_buffer == NULL) { - db->string_buffer = buf = SdbpAlloc(sizeof(DB)); + db->string_buffer = buf = SdbAlloc(sizeof(DB)); if (buf == NULL) return FALSE; buf->size = 128; -- 2.17.1