/*****************************************************************************\
* MODULE: sem.h
*
* Header file for the semaphore/crit-sect handling.
*
*
* Copyright (C) 1996-1997 Microsoft Corporation
* Copyright (C) 1996-1997 Hewlett Packard
*
* History:
*   24-Aug-1997 HWP-Guys    Created.
*
\*****************************************************************************/
#ifndef _INETPPSEM_H
#define _INETPPSEM_H

#ifdef DEBUG

/*****************************************************************************\
* _sem_dbg_EnterCrit
*
\*****************************************************************************/
_inline VOID _sem_dbg_EnterCrit(VOID)
{
    EnterCriticalSection(&g_csMonitorSection);

    g_dwCritOwner = GetCurrentThreadId();
}

/*****************************************************************************\
* _sem_dbg_LeaveCrit
*
\*****************************************************************************/
_inline VOID _sem_dbg_LeaveCrit(VOID)
{
    g_dwCritOwner = 0;

    LeaveCriticalSection(&g_csMonitorSection);
}

/*****************************************************************************\
* _sem_dbg_CheckCrit
*
\*****************************************************************************/
_inline VOID _sem_dbg_CheckCrit(VOID)
{
    DWORD dwCurrent = GetCurrentThreadId();

    DBG_ASSERT((dwCurrent == g_dwCritOwner), (TEXT("Assert: _sem_dbg_CheckCrit: Thread(%d), Owner(%d)"), dwCurrent, g_dwCritOwner));
}

#define semEnterCrit() _sem_dbg_EnterCrit()
#define semLeaveCrit() _sem_dbg_LeaveCrit()
#define semCheckCrit() _sem_dbg_CheckCrit()

#else

#define semEnterCrit() EnterCriticalSection(&g_csMonitorSection)
#define semLeaveCrit() LeaveCriticalSection(&g_csMonitorSection)
#define semCheckCrit() {}

#endif


#define semInitCrit()  InitializeCriticalSection(&g_csMonitorSection)
#define semFreeCrit()  DeleteCriticalSection(&g_csMonitorSection)

_inline VOID semSafeLeaveCrit(PCINETMONPORT pIniPort)
{
    pIniPort->IncRef ();
    semLeaveCrit();
}

_inline VOID semSafeEnterCrit(PCINETMONPORT pIniPort)
{

    pIniPort->DecRef ();
    semEnterCrit();
}


#endif