diff options
| author | Sean Hall <r.sean.hall@gmail.com> | 2021-05-02 18:50:49 -0500 |
|---|---|---|
| committer | Sean Hall <r.sean.hall@gmail.com> | 2021-05-11 19:11:19 -0500 |
| commit | 71e689fe5179ca253d878480ba34e2e76a540eab (patch) | |
| tree | dbd197605fdcc2805acc2d971fdc2dbc8bb6d8cb /src | |
| parent | 5da97c750ef36518970eb0d3b02655b2eac75a35 (diff) | |
| download | wix-71e689fe5179ca253d878480ba34e2e76a540eab.tar.gz wix-71e689fe5179ca253d878480ba34e2e76a540eab.tar.bz2 wix-71e689fe5179ca253d878480ba34e2e76a540eab.zip | |
Add ability to suppress pfnTraceErrorCallback for the current thread.
Suppress BurnTraceError while logging errors from BurnTraceError.
#6378
Diffstat (limited to 'src')
| -rw-r--r-- | src/burn/stub/stub.cpp | 2 | ||||
| -rw-r--r-- | src/libs/dutil/WixToolset.DUtil/dutil.cpp | 27 | ||||
| -rw-r--r-- | src/libs/dutil/WixToolset.DUtil/inc/dutil.h | 17 |
3 files changed, 45 insertions, 1 deletions
diff --git a/src/burn/stub/stub.cpp b/src/burn/stub/stub.cpp index 0cb202e0..090a8dbb 100644 --- a/src/burn/stub/stub.cpp +++ b/src/burn/stub/stub.cpp | |||
| @@ -101,6 +101,8 @@ static void CALLBACK BurnTraceError( | |||
| 101 | 101 | ||
| 102 | if (fLog) | 102 | if (fLog) |
| 103 | { | 103 | { |
| 104 | DutilSuppressTraceErrorSource(); | ||
| 104 | LogErrorStringArgs(hrError, szFormat, args); | 105 | LogErrorStringArgs(hrError, szFormat, args); |
| 106 | DutilUnsuppressTraceErrorSource(); | ||
| 105 | } | 107 | } |
| 106 | } | 108 | } |
diff --git a/src/libs/dutil/WixToolset.DUtil/dutil.cpp b/src/libs/dutil/WixToolset.DUtil/dutil.cpp index 56b85207..dd4fa8bf 100644 --- a/src/libs/dutil/WixToolset.DUtil/dutil.cpp +++ b/src/libs/dutil/WixToolset.DUtil/dutil.cpp | |||
| @@ -30,6 +30,8 @@ static REPORT_LEVEL Dutil_rlCurrentTrace = REPORT_STANDARD; | |||
| 30 | static BOOL Dutil_fTraceFilenames = FALSE; | 30 | static BOOL Dutil_fTraceFilenames = FALSE; |
| 31 | static DUTIL_CALLBACK_TRACEERROR vpfnTraceErrorCallback = NULL; | 31 | static DUTIL_CALLBACK_TRACEERROR vpfnTraceErrorCallback = NULL; |
| 32 | 32 | ||
| 33 | thread_local static DWORD vtdwSuppressTraceErrorSource = 0; | ||
| 34 | |||
| 33 | 35 | ||
| 34 | DAPI_(HRESULT) DutilInitialize( | 36 | DAPI_(HRESULT) DutilInitialize( |
| 35 | __in_opt DUTIL_CALLBACK_TRACEERROR pfnTraceErrorCallback | 37 | __in_opt DUTIL_CALLBACK_TRACEERROR pfnTraceErrorCallback |
| @@ -48,6 +50,28 @@ DAPI_(void) DutilUninitialize() | |||
| 48 | vpfnTraceErrorCallback = NULL; | 50 | vpfnTraceErrorCallback = NULL; |
| 49 | } | 51 | } |
| 50 | 52 | ||
| 53 | DAPI_(BOOL) DutilSuppressTraceErrorSource() | ||
| 54 | { | ||
| 55 | if (DWORD_MAX == vtdwSuppressTraceErrorSource) | ||
| 56 | { | ||
| 57 | return FALSE; | ||
| 58 | } | ||
| 59 | |||
| 60 | ++vtdwSuppressTraceErrorSource; | ||
| 61 | return TRUE; | ||
| 62 | } | ||
| 63 | |||
| 64 | DAPI_(BOOL) DutilUnsuppressTraceErrorSource() | ||
| 65 | { | ||
| 66 | if (0 == vtdwSuppressTraceErrorSource) | ||
| 67 | { | ||
| 68 | return FALSE; | ||
| 69 | } | ||
| 70 | |||
| 71 | --vtdwSuppressTraceErrorSource; | ||
| 72 | return TRUE; | ||
| 73 | } | ||
| 74 | |||
| 51 | /******************************************************************* | 75 | /******************************************************************* |
| 52 | Dutil_SetAssertModule | 76 | Dutil_SetAssertModule |
| 53 | 77 | ||
| @@ -427,8 +451,9 @@ DAPIV_(void) Dutil_TraceErrorSource( | |||
| 427 | ... | 451 | ... |
| 428 | ) | 452 | ) |
| 429 | { | 453 | { |
| 454 | // if this callback is currently suppressed, or | ||
| 430 | // if this is NOT an error report and we're not logging at this level, bail | 455 | // if this is NOT an error report and we're not logging at this level, bail |
| 431 | if (REPORT_ERROR != rl && Dutil_rlCurrentTrace < rl) | 456 | if (vtdwSuppressTraceErrorSource || REPORT_ERROR != rl && Dutil_rlCurrentTrace < rl) |
| 432 | { | 457 | { |
| 433 | return; | 458 | return; |
| 434 | } | 459 | } |
diff --git a/src/libs/dutil/WixToolset.DUtil/inc/dutil.h b/src/libs/dutil/WixToolset.DUtil/inc/dutil.h index fc9ec0f4..52da066c 100644 --- a/src/libs/dutil/WixToolset.DUtil/inc/dutil.h +++ b/src/libs/dutil/WixToolset.DUtil/inc/dutil.h | |||
| @@ -41,6 +41,23 @@ HRESULT DAPI DutilInitialize( | |||
| 41 | *******************************************************************/ | 41 | *******************************************************************/ |
| 42 | void DAPI DutilUninitialize(); | 42 | void DAPI DutilUninitialize(); |
| 43 | 43 | ||
| 44 | |||
| 45 | /******************************************************************** | ||
| 46 | DutilSuppressTraceErrorSource - tells dutil to skip calling | ||
| 47 | pfnTraceErrorCallback for the current thread. This is reference | ||
| 48 | counted, so dutil won't start calling it again until there is an | ||
| 49 | equal number of calls to DutilUnsuppressTraceErrorSource. | ||
| 50 | Returns whether the count was incremented. | ||
| 51 | |||
| 52 | *******************************************************************/ | ||
| 53 | BOOL DAPI DutilSuppressTraceErrorSource(); | ||
| 54 | |||
| 55 | /******************************************************************** | ||
| 56 | DutilUnsuppressTraceErrorSource - opposite of DutilSuppressTraceErrorSource. | ||
| 57 | |||
| 58 | *******************************************************************/ | ||
| 59 | BOOL DAPI DutilUnsuppressTraceErrorSource(); | ||
| 60 | |||
| 44 | void DAPI Dutil_SetAssertModule(__in HMODULE hAssertModule); | 61 | void DAPI Dutil_SetAssertModule(__in HMODULE hAssertModule); |
| 45 | void DAPI Dutil_SetAssertDisplayFunction(__in DUTIL_ASSERTDISPLAYFUNCTION pfn); | 62 | void DAPI Dutil_SetAssertDisplayFunction(__in DUTIL_ASSERTDISPLAYFUNCTION pfn); |
| 46 | void DAPI Dutil_Assert(__in_z LPCSTR szFile, __in int iLine); | 63 | void DAPI Dutil_Assert(__in_z LPCSTR szFile, __in int iLine); |
