_NAME & operator=(_NAME const &);
#endif
-// The types of stack validation we support in holders.
-enum HolderStackValidation
-{
- HSV_NoValidation,
- HSV_ValidateMinimumStackReq,
- HSV_ValidateNormalStackReq,
-};
-
#ifdef _DEBUG
-
//------------------------------------------------------------------------------------------------
// This is used to make Visual Studio autoexp.dat work sensibly with holders again.
// The problem is that certain codebases (particulary Fusion) implement key data structures
typename TYPE,
typename BASE,
UINT_PTR DEFAULTVALUE = 0,
- BOOL IS_NULL(TYPE, TYPE) = CompareDefault<TYPE>,
- HolderStackValidation VALIDATION_TYPE = HSV_ValidateNormalStackReq
+ BOOL IS_NULL(TYPE, TYPE) = CompareDefault<TYPE>
>
class BaseHolder : protected BASE
{
if (m_acquired)
{
_ASSERTE(!IsNull());
-
- if (VALIDATION_TYPE != HSV_NoValidation)
- {
- this->DoRelease();
- }
- else
- {
- this->DoRelease();
- }
+ this->DoRelease();
m_acquired = FALSE;
}
}
HIDE_GENERATED_METHODS(BaseHolder)
}; // BaseHolder<>
-template <void (*ACQUIRE)(), void (*RELEASEF)(), HolderStackValidation VALIDATION_TYPE = HSV_ValidateNormalStackReq>
+template <void (*ACQUIRE)(), void (*RELEASEF)()>
class StateHolder
{
private:
if (m_acquired)
{
- if (VALIDATION_TYPE != HSV_NoValidation)
- {
- RELEASEF();
- }
- else
- {
- RELEASEF();
- }
+ RELEASEF();
m_acquired = FALSE;
}
}
}; // class StateHolder<>
// Holder for the case where the acquire function can fail.
-template <typename VALUE, BOOL (*ACQUIRE)(VALUE value), void (*RELEASEF)(VALUE value), HolderStackValidation VALIDATION_TYPE = HSV_ValidateNormalStackReq>
+template <typename VALUE, BOOL (*ACQUIRE)(VALUE value), void (*RELEASEF)(VALUE value)>
class ConditionalStateHolder
{
private:
if (m_acquired)
{
- if (VALIDATION_TYPE != HSV_NoValidation)
- {
- RELEASEF(m_value);
- }
- else
- {
- RELEASEF(m_value);
- }
+ RELEASEF(m_value);
m_acquired = FALSE;
}
}
// the value it contains.
//-----------------------------------------------------------------------------
template <typename TYPE, typename BASE,
- UINT_PTR DEFAULTVALUE = 0, BOOL IS_NULL(TYPE, TYPE) = CompareDefault<TYPE>, HolderStackValidation VALIDATION_TYPE = HSV_ValidateNormalStackReq>
-class BaseWrapper : public BaseHolder<TYPE, BASE, DEFAULTVALUE, IS_NULL, VALIDATION_TYPE>
+ UINT_PTR DEFAULTVALUE = 0, BOOL IS_NULL(TYPE, TYPE) = CompareDefault<TYPE>>
+class BaseWrapper : public BaseHolder<TYPE, BASE, DEFAULTVALUE, IS_NULL>
{
- typedef BaseHolder<TYPE, BASE, DEFAULTVALUE, IS_NULL, VALIDATION_TYPE> BaseT;
+ typedef BaseHolder<TYPE, BASE, DEFAULTVALUE, IS_NULL> BaseT;
#ifdef __GNUC__
// function pointers
//-----------------------------------------------------------------------------
-template <typename TYPE, void (*ACQUIREF)(TYPE), void (*RELEASEF)(TYPE), HolderStackValidation VALIDATION_TYPE = HSV_ValidateNormalStackReq>
+template <typename TYPE, void (*ACQUIREF)(TYPE), void (*RELEASEF)(TYPE)>
class FunctionBase : protected HolderBase<TYPE>
{
protected:
void DoRelease()
{
- // <TODO> Consider removing this stack validation since it is redundant with the
- // one that is already being done in BaseHolder & BaseWrapper. </TODO>
- if (VALIDATION_TYPE != HSV_NoValidation)
- {
- RELEASEF(this->m_value);
- }
- else
- {
- RELEASEF(this->m_value);
- }
+ RELEASEF(this->m_value);
}
}; // class Function<>
void (*RELEASEF)(TYPE),
UINT_PTR DEFAULTVALUE = 0,
BOOL IS_NULL(TYPE, TYPE) = CompareDefault<TYPE>,
- HolderStackValidation VALIDATION_TYPE = HSV_ValidateNormalStackReq,
// For legacy compat (see EEJitManager::WriterLockHolder), where default ctor
// causes ACQUIREF(DEFAULTVALUE), but ACQUIREF ignores the argument and
// operates on static or global value instead.
bool DEFAULT_CTOR_ACQUIRE = true
>
-class Holder : public BaseHolder<TYPE, FunctionBase<TYPE, ACQUIREF, RELEASEF, VALIDATION_TYPE>,
- DEFAULTVALUE, IS_NULL, VALIDATION_TYPE>
+class Holder : public BaseHolder<TYPE, FunctionBase<TYPE, ACQUIREF, RELEASEF>,
+ DEFAULTVALUE, IS_NULL>
{
- typedef BaseHolder<TYPE, FunctionBase<TYPE, ACQUIREF, RELEASEF, VALIDATION_TYPE>,
- DEFAULTVALUE, IS_NULL, VALIDATION_TYPE> BaseT;
+ typedef BaseHolder<TYPE, FunctionBase<TYPE, ACQUIREF, RELEASEF>,
+ DEFAULTVALUE, IS_NULL> BaseT;
public:
FORCEINLINE Holder()
void (*RELEASEF)(TYPE),
UINT_PTR DEFAULTVALUE = 0,
BOOL IS_NULL(TYPE, TYPE) = CompareDefault<TYPE>,
- HolderStackValidation VALIDATION_TYPE = HSV_ValidateNormalStackReq,
// For legacy compat (see EEJitManager::WriterLockHolder), where default ctor
// causes ACQUIREF(DEFAULTVALUE), but ACQUIREF ignores the argument and
// operates on static or global value instead.
bool DEFAULT_CTOR_ACQUIRE = true
>
-class Wrapper : public BaseWrapper<TYPE, FunctionBase<TYPE, ACQUIREF, RELEASEF, VALIDATION_TYPE>,
- DEFAULTVALUE, IS_NULL, VALIDATION_TYPE>
+class Wrapper : public BaseWrapper<TYPE, FunctionBase<TYPE, ACQUIREF, RELEASEF>,
+ DEFAULTVALUE, IS_NULL>
{
- typedef BaseWrapper<TYPE, FunctionBase<TYPE, ACQUIREF, RELEASEF, VALIDATION_TYPE>,
- DEFAULTVALUE, IS_NULL, VALIDATION_TYPE> BaseT;
+ typedef BaseWrapper<TYPE, FunctionBase<TYPE, ACQUIREF, RELEASEF>,
+ DEFAULTVALUE, IS_NULL> BaseT;
public:
FORCEINLINE Wrapper()
FORCEINLINE void CounterIncrease(RAW_KEYWORD(volatile) LONG* p) {InterlockedIncrement(p);};
FORCEINLINE void CounterDecrease(RAW_KEYWORD(volatile) LONG* p) {InterlockedDecrement(p);};
-typedef Wrapper<RAW_KEYWORD(volatile) LONG*, CounterIncrease, CounterDecrease, (UINT_PTR)0, CompareDefault<RAW_KEYWORD(volatile) LONG*>, HSV_NoValidation> CounterHolder;
+typedef Wrapper<RAW_KEYWORD(volatile) LONG*, CounterIncrease, CounterDecrease, (UINT_PTR)0, CompareDefault<RAW_KEYWORD(volatile) LONG*>> CounterHolder;
#ifndef FEATURE_PAL