111 lines
2.5 KiB
C
111 lines
2.5 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1995 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
|
||
|
Abstract:
|
||
|
File contains the following functions
|
||
|
UpdateCache
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
Amritansh Raghav 6/8/95 Created
|
||
|
|
||
|
--*/
|
||
|
|
||
|
|
||
|
//
|
||
|
// Include files
|
||
|
//
|
||
|
|
||
|
#include "allinc.h"
|
||
|
PSZ
|
||
|
CacheToA(
|
||
|
DWORD dwCache
|
||
|
);
|
||
|
DWORD
|
||
|
UpdateCache(
|
||
|
DWORD dwCache
|
||
|
)
|
||
|
/*++
|
||
|
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
|
||
|
|
||
|
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
|
||
|
Returns:
|
||
|
NO_ERROR or some error code
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
DWORD dwResult = NO_ERROR;
|
||
|
LONG dwNeed;
|
||
|
LONG dwSpace;
|
||
|
|
||
|
TRACE1("Trying to update %s Cache",CacheToA(dwCache));
|
||
|
|
||
|
__try
|
||
|
{
|
||
|
EnterWriter(dwCache);
|
||
|
|
||
|
if((g_dwLastUpdateTable[dwCache] isnot 0) and
|
||
|
((GetCurrentTime() - g_dwLastUpdateTable[dwCache]) < g_dwTimeoutTable[dwCache]))
|
||
|
{
|
||
|
dwResult = NO_ERROR;
|
||
|
__leave;
|
||
|
}
|
||
|
|
||
|
TRACE1("%s Cache out of date",CacheToA(dwCache));
|
||
|
|
||
|
dwResult = (*g_pfnLoadFunctionTable[dwCache])();
|
||
|
|
||
|
if(dwResult isnot NO_ERROR)
|
||
|
{
|
||
|
TRACE1("Unable to load %s Cache\n",CacheToA(dwCache));
|
||
|
g_dwLastUpdateTable[dwCache] = 0;
|
||
|
__leave;
|
||
|
}
|
||
|
|
||
|
TRACE1("%s Cache loaded successfully\n",CacheToA(dwCache));
|
||
|
g_dwLastUpdateTable[dwCache] = GetCurrentTime();
|
||
|
|
||
|
dwResult = NO_ERROR;
|
||
|
}
|
||
|
__finally
|
||
|
{
|
||
|
ReleaseLock(dwCache);
|
||
|
}
|
||
|
return(dwResult);
|
||
|
}
|
||
|
|
||
|
|
||
|
PSZ
|
||
|
CacheToA(
|
||
|
DWORD dwCache
|
||
|
)
|
||
|
{
|
||
|
static PSZ cacheName[] = {
|
||
|
"System ",
|
||
|
"Interfaces",
|
||
|
"Ip Address Table",
|
||
|
"Ip Forward Table",
|
||
|
"Ip Net To Media table",
|
||
|
"Tcp Table",
|
||
|
"Udp Table",
|
||
|
"Arp Entity Table",
|
||
|
"Illegal Cache Number - ABORT!!!!"
|
||
|
};
|
||
|
return((((int) dwCache<0) or (dwCache >= NUM_CACHE - 1))?
|
||
|
cacheName[NUM_CACHE-1] : cacheName[dwCache]);
|
||
|
}
|