2025-04-27 07:49:33 -04:00

133 lines
2.1 KiB
C++

/*++
Copyright (c) 1998 Microsoft Corporation
Module Name :
streamcontext.cxx
Abstract:
Implementation of STREAM_CONTEXT. One such object for every connection
Author:
Bilal Alam (BAlam) 29-March-2000
Environment:
Win32 - User Mode
Project:
Stream Filter Worker Process
--*/
#include "precomp.hxx"
LIST_ENTRY STREAM_CONTEXT::sm_ListHead;
CRITICAL_SECTION STREAM_CONTEXT::sm_csContextList;
DWORD STREAM_CONTEXT::sm_cContexts;
STREAM_CONTEXT::STREAM_CONTEXT(
UL_CONTEXT * pContext
)
{
DBG_ASSERT( pContext != NULL );
_pUlContext = pContext;
EnterCriticalSection( &sm_csContextList );
InsertHeadList( &sm_ListHead, &_ListEntry );
sm_cContexts++;
LeaveCriticalSection( &sm_csContextList );
_dwSignature = STREAM_CONTEXT_SIGNATURE;
}
STREAM_CONTEXT::~STREAM_CONTEXT()
{
_dwSignature = STREAM_CONTEXT_SIGNATURE_FREE;
EnterCriticalSection( &sm_csContextList );
sm_cContexts--;
RemoveEntryList( &_ListEntry );
LeaveCriticalSection( &sm_csContextList );
}
//static
HRESULT
STREAM_CONTEXT::Initialize(
VOID
)
/*++
Routine Description:
Global Initialization
Arguments:
None
Return Value:
HRESULT
--*/
{
INITIALIZE_CRITICAL_SECTION( &sm_csContextList );
InitializeListHead( &sm_ListHead );
return NO_ERROR;
}
//static
VOID
STREAM_CONTEXT::Terminate(
VOID
)
/*++
Routine Description:
Global termination
Arguments:
None
Return Value:
None
--*/
{
DeleteCriticalSection( &sm_csContextList );
}
//static
VOID
STREAM_CONTEXT::WaitForContextDrain(
VOID
)
/*++
Routine Description:
Wait for all contexts to go away
Arguments:
None
Return Value:
None
--*/
{
while ( sm_cContexts != 0 )
{
DBGPRINTF(( DBG_CONTEXT,
"Waiting for %d STREAM_CONTEXTs to drain\n",
sm_cContexts ));
Sleep( 1000 );
}
}