63 lines
1 KiB
C++
63 lines
1 KiB
C++
/*++
|
|
|
|
Copyright (C) Microsoft Corporation, 1996 - 1999
|
|
|
|
Module Name:
|
|
|
|
hndlcach.hxx
|
|
|
|
Abstract:
|
|
|
|
The handle cache.
|
|
|
|
Author:
|
|
|
|
Kamen Moutafov [KamenM]
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#ifndef __HNDLCACH_HXX
|
|
#define __HNDLCACH_HXX
|
|
|
|
const INT DEFAULT_CACHE_SIZE = 2;
|
|
|
|
class HandleCache
|
|
{
|
|
public:
|
|
inline HandleCache(void)
|
|
{
|
|
Init();
|
|
}
|
|
~HandleCache(void);
|
|
|
|
inline void Init(void)
|
|
{
|
|
int i;
|
|
for (i = 0; i < DEFAULT_CACHE_SIZE; i ++)
|
|
{
|
|
cacheSlots[i] = NULL;
|
|
}
|
|
}
|
|
|
|
// not synchronized
|
|
HANDLE CheckOutHandle(void);
|
|
|
|
// synchronized between multiple threads. Will zero out the handle if it
|
|
// was saved in the cache. If the cache is empty, this call has defined
|
|
// FIFO semantics. This is significant in the NPFS case.
|
|
void CheckinHandle(HANDLE *ph);
|
|
|
|
#if defined(DBG) || defined(_DEBUG)
|
|
// not synchornized
|
|
BOOL IsSecondHandleUsed(void);
|
|
#endif
|
|
|
|
private:
|
|
HANDLE cacheSlots[DEFAULT_CACHE_SIZE];
|
|
};
|
|
|
|
#endif // __HNDLCACH_HXX
|
|
|