windows-nt/Source/XPSP1/NT/net/rras/ip/rtrmgr/cache.c
2020-09-26 16:20:57 +08:00

132 lines
2.6 KiB
C

/*++
Copyright (c) 1995 Microsoft Corporation
Module Name:
Abstract:
File contains the following functions
ActionCache
CacheToA
Revision History:
Amritansh Raghav 6/8/95 Created
--*/
//
// Include files
//
#include "allinc.h"
DWORD
UpdateCache(
DWORD dwCache,
BOOL *fUpdate
)
/*++
Routine Description
Function used to update a cache. It checks to see if the last time
the cache was updated is greater than the time out (A value of 0
for the last time of update means the cache is invalid), calls the
function that loads the cache and then sets the last update time
Locks
Arguments
dwCache This is one of the Cache Ids defined in rtrmgr/defs.h. It
is used to index into the table of locks protecting the caches,
the table of function pointers that holds a pointer to a
function that loads the cache andthe table of last update times
fUpdate Is Set to true if the cache is updated
Return Value
None
--*/
{
DWORD dwResult = NO_ERROR;
LONG dwNeed;
LONG dwSpace;
//
// BUG put in a bounds check here otherwise effects can be disastrous
//
// Trace1(MIB,"Trying to update %s cache", CacheToA(dwCache));
__try
{
ENTER_READER(dwCache);
if((g_LastUpdateTable[dwCache] isnot 0) and
((GetCurrentTime() - g_LastUpdateTable[dwCache]) < g_TimeoutTable[dwCache]))
{
*fUpdate = FALSE;
dwResult = NO_ERROR;
__leave;
}
READER_TO_WRITER(dwCache);
// Trace0(MIB,"Cache out of date");
dwResult = (*g_LoadFunctionTable[dwCache])();
if(dwResult isnot NO_ERROR)
{
Trace2(ERR,"Error %d loading %s cache",
dwResult,
CacheToA(dwCache));
g_LastUpdateTable[dwCache] = 0;
__leave;
}
g_LastUpdateTable[dwCache] = GetCurrentTime();
dwResult = NO_ERROR;
}
__finally
{
EXIT_LOCK(dwCache);
}
return dwResult; //to keep compiler happy
}
PSZ
CacheToA(
DWORD dwCache
)
{
static PSZ cacheName[] = {"Ip Address Table",
"Ip Forward Table",
"Ip Net To Media table",
"Tcp Table",
"Udp Table",
"Arp Entity Table",
"Illegal Cache Number - ABORT!!!!"};
return( (dwCache >= NUM_CACHE - 1)?
cacheName[NUM_CACHE-1] : cacheName[dwCache]);
}