Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
Copyright(c) 1999-2000 Microsoft Corporation
Module Name:
brdgwait.h
Abstract:
Ethernet MAC level bridge WAIT_REFCOUNT implementation
Author:
Mark Aiken
Environment:
Kernel mode driver
Revision History:
Feb 2000 - Original version
--*/
// ===========================================================================
//
// DECLARATIONS
//
// ===========================================================================
//
// Structure for a refcount that can be waited against (when waiting for 0)
//
typedef enum { WaitRefEnabled = 0, WaitRefShuttingDown, WaitRefShutdown } WAIT_REFCOUNT_STATE;
typedef struct _WAIT_REFCOUNT { LONG Refcount; // The refcount
NDIS_EVENT Event; // Signaled when RefCount hits 0
WAIT_REFCOUNT_STATE state; // Current state
BOOLEAN bResettable; // TRUE if it's OK to reset this
// refcount when state == WaitRefShuttingDown
NDIS_SPIN_LOCK lock; // Protects fields above
} WAIT_REFCOUNT, *PWAIT_REFCOUNT;
// ===========================================================================
//
// PROTOTYPES
//
// ===========================================================================
VOID BrdgInitializeWaitRef( IN PWAIT_REFCOUNT pRefcount, IN BOOLEAN bResettable );
BOOLEAN BrdgIncrementWaitRef( IN PWAIT_REFCOUNT pRefcount );
VOID BrdgReincrementWaitRef( IN PWAIT_REFCOUNT pRefcount );
VOID BrdgDecrementWaitRef( IN PWAIT_REFCOUNT pRefcount );
VOID BrdgBlockWaitRef( IN PWAIT_REFCOUNT pRefcount );
BOOLEAN BrdgShutdownBlockedWaitRef( IN PWAIT_REFCOUNT pRefcount );
BOOLEAN BrdgShutdownWaitRef( IN PWAIT_REFCOUNT pRefcount );
//
// Use when it should be impossible for two or more threads of
// execution to simultaneously shut down your waitref.
//
__inline VOID BrdgShutdownWaitRefOnce( IN PWAIT_REFCOUNT pRefcount ) { BOOLEAN bSuccess = FALSE; bSuccess = BrdgShutdownWaitRef( pRefcount ); SAFEASSERT( bSuccess ); }
VOID BrdgResetWaitRef( IN PWAIT_REFCOUNT pRefcount );
|