From ef80b3dde48dc399fc4483ef897325afe77275f3 Mon Sep 17 00:00:00 2001 From: Whindmar Saksit Date: Thu, 2 May 2024 17:56:28 +0200 Subject: [PATCH] [SDK] ReleaseCComPtrExpectZero should print the relevant file:line (#6772) ReleaseCComPtrExpectZero currently always prints the same line from shellutils.h in the warning which is not very useful. A macro is required for __FILE__ to be correct. --- sdk/include/reactos/shellutils.h | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/sdk/include/reactos/shellutils.h b/sdk/include/reactos/shellutils.h index c678e3382c4..8eed78e33d6 100644 --- a/sdk/include/reactos/shellutils.h +++ b/sdk/include/reactos/shellutils.h @@ -227,25 +227,23 @@ public: #endif template -void ReleaseCComPtrExpectZero(CComPtr& cptr, BOOL forceRelease = FALSE) +ULONG ReleaseCComPtrExpectZeroHelper(const char *file, UINT line, CComPtr& cptr, BOOL forceRelease = FALSE) { + ULONG r = 0; if (cptr.p != NULL) { T *raw = cptr.Detach(); - int nrc = raw->Release(); + int nrc = r = raw->Release(); if (nrc > 0) + Win32DbgPrint(file, line, "WARNING: Unexpected RefCount > 0 (%d)\n", nrc); + while (nrc > 0 && forceRelease) { - DbgPrint("WARNING: Unexpected RefCount > 0 (%d)!\n", nrc); - if (forceRelease) - { - while (nrc > 0) - { - nrc = raw->Release(); - } - } + nrc = raw->Release(); } } + return r; } +#define ReleaseCComPtrExpectZero(...) ReleaseCComPtrExpectZeroHelper(__FILE__, __LINE__, __VA_ARGS__) template HRESULT inline ShellDebugObjectCreator(REFIID riid, R ** ppv)