Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

144 lines
4.3 KiB

/***************************************************************************
Name : TIMEOUTS.C
Comment : Various support functions
Revision Log
Num Date Name Description
--- -------- ---------- -----------------------------------------------
001 12/18/91 arulm Commenting it for the first time. This is the
"stable" DOS version from which the Windows code
will be derived. This file should not change
for Windows
***************************************************************************/
#include "prep.h"
#include "fcomint.h"
#include "fdebug.h"
///RSL
#include "glbproto.h"
#define faxTlog(m) DEBUGMSG(ZONE_TO, m)
#define faxT2log(m) DEBUGMSG(ZONE_TIMEOUT, m)
#define FILEID FILEID_TIMEOUTS
/***************************************************************************
Name : Timers Class
Purpose : Provide for Timeouts
TO -- Timeout struct
startTimeout -- creates a new timeout
***************************************************************************/
void startTimeOut(PThrdGlbl pTG, LPTO lpto, ULONG ulTimeout)
{
///////////// ulTimeout <<= 1; // give us a little more time during debugging
BG_CHK(lpto);
lpto->ulStart = GetTickCount();
lpto->ulTimeout = ulTimeout;
lpto->ulEnd = lpto->ulStart + ulTimeout; // will wrap around as system
// time nears 4Gig ms
(MyDebugPrint(pTG, LOG_ALL, "StartTO: 0x%08lx --> to=0x%08lx start=0x%08lx end=0x%08lx\r\n",
lpto, lpto->ulTimeout, lpto->ulStart, lpto->ulEnd));
return;
}
BOOL checkTimeOut(PThrdGlbl pTG, LPTO lpto)
{
// if it returns FALSE, caller must return FALSE immediately
// (after cleaning up, as appropriate).
// SWORD swRet;
ULONG ulTime;
BG_CHK(lpto);
ulTime = GetTickCount();
//// if(fVerbose3)
//// (MyDebugPrint(pTG, "CheckTO: 0x%08lx --> to=0x%08lx start=0x%08lx end=0x%08lx CURR=0x%08lx\r\n",
//// lpto, lpto->ulTimeout, lpto->ulStart, lpto->ulEnd, ulTime));
if(lpto->ulTimeout == 0)
{
goto out;
}
else if(lpto->ulEnd >= lpto->ulStart)
{
if(ulTime >= lpto->ulStart && ulTime <= lpto->ulEnd)
return TRUE;
else
goto out;
}
else // ulEnd wrapped around!!
{
ERRMSG(("<<ERROR>> CheckTO WRAPPED!!: 0x%04x --> to=0x%08lx start=0x%08lx end=0x%08lx time=0x%08lx\r\n",
lpto, lpto->ulTimeout, lpto->ulStart, lpto->ulEnd, ulTime));
if(ulTime >= lpto->ulStart || ulTime <= lpto->ulEnd)
return TRUE;
else
goto out;
}
out:
faxT2log(("CheckTO--TIMEOUT!: 0x%04x --> to=0x%08lx start=0x%08lx end=0x%08lx CURR=0x%08lx\r\n",
lpto, lpto->ulTimeout, lpto->ulStart, lpto->ulEnd, ulTime));
return FALSE;
}
// this will return garbage values if
ULONG leftTimeOut(PThrdGlbl pTG, LPTO lpto)
{
ULONG ulTime;
BG_CHK(lpto);
ulTime = GetTickCount();
if(lpto->ulTimeout == 0)
return 0;
else if(lpto->ulEnd >= lpto->ulStart)
{
if(ulTime >= lpto->ulStart && ulTime <= lpto->ulEnd)
return (lpto->ulEnd - ulTime);
else
return 0;
}
else
{
if(ulTime >= lpto->ulStart || ulTime <= lpto->ulEnd)
return (lpto->ulEnd - ulTime); // in unsigned arithmetic this
// works correctly even if End<Time
else
return 0;
}
}