windows-nt/Source/XPSP1/NT/inetsrv/iis/svcs/infocomm/common/reftrce2.h

70 lines
2.4 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
#ifndef __REFTRCE2_H__
#define __REFTRCE2_H__
#if SERVICE_REF_TRACKING
# include <reftrace.h>
# define SHARED_LOG_REF_COUNT() \
( sm_pDbgRefTraceLog != NULL ) ? \
WriteRefTraceLog( \
sm_pDbgRefTraceLog \
, m_reference \
, this \
) \
: -1 \
//
// This macro logs the IIS_SERVICE-specific ref trace log
//
# define LOCAL_LOG_REF_COUNT() \
( m_pDbgRefTraceLog != NULL ) ? \
WriteRefTraceLog( \
m_pDbgRefTraceLog \
, m_reference \
, this \
) \
: -1 \
//
// Usage of above macros AFTER we decremented reference count
// was unsafe. Under stress we would sometimes hit assert
// in WriteTraceLog() because IIS_SERVICE::m_pDbgRefTraceLog
// was no longer valid. This was due to a race condition where
// another thread deletes IIS_SERVICE object while we are still
// doing the log.
// So, instead of using original macros AFTER the decrement
// use modified macros BEFORE the decrement. This should
// result in identical logs most of the time (subject to
// race conditions and our guessing of what post decrement
// reference count will be).
//
# define SHARED_EARLY_LOG_REF_COUNT() \
( sm_pDbgRefTraceLog != NULL ) ? \
WriteRefTraceLog( \
sm_pDbgRefTraceLog \
, m_reference - 1 \
, this \
) \
: -1 \
# define LOCAL_EARLY_LOG_REF_COUNT() \
( m_pDbgRefTraceLog != NULL ) ? \
WriteRefTraceLog( \
m_pDbgRefTraceLog \
, m_reference - 1 \
, this \
) \
: -1 \
#else // !SERVICE_REF_TRACKING
# define SHARED_LOG_REF_COUNT() (-1)
# define LOCAL_LOG_REF_COUNT() (-1)
# define SHARED_EARLY_LOG_REF_COUNT() (-1)
# define LOCAL_EARLY_LOG_REF_COUNT() (-1)
#endif // !SERVICE_REF_TRACKING
#endif // __REFTRCE2_H__