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.
|
|
//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1996 - 1999.
//
// File: falloc.hxx
//
// Contents: fast memory allocator
//
// History: 15-Mar-96 dlee Created.
//
//----------------------------------------------------------------------------
#pragma once
// alignment for all allocations
const ULONG cbMemAlignment = 8;
inline ULONG memAlignBlock( ULONG x ) { return ( x + ( cbMemAlignment - 1 ) ) & ~( cbMemAlignment - 1 ); }
void * memAlloc( UINT ui ); void memFree( void * p ); UINT memSize( void const * p ); BOOL memIsValidPointer( const void * p ); void memUtilization();
//+---------------------------------------------------------------------------
//
// Class: CMemMutex
//
// Purpose: Class for the global heap lock
//
// History: 25-Oct-96 dlee Created.
//
//----------------------------------------------------------------------------
class CMemMutex { public: CMemMutex() { // two-phase construction to deal with exception on initialization
memset( &_cs, 0, sizeof _cs ); }
~CMemMutex() { DeleteCriticalSection( &_cs ); }
void Init() { // The high bit means the event is pre-allocated, so it won't
// fail to be allocated while we're unwinding an exception.
InitializeCriticalSectionAndSpinCount( &_cs, 0x80000500 ); }
void Enter() { ciAssert( !IsHeld() ); // valid, but would be wasteful
EnterCriticalSection( &_cs ); }
void Leave() { ciAssert( IsHeld() ); // valid, but would be wasteful
LeaveCriticalSection( &_cs ); }
BOOL IsHeld() { return ( LongToHandle( GetCurrentThreadId() ) == _cs.OwningThread ); }
private: CRITICAL_SECTION _cs; };
|