145 lines
4.3 KiB
C
145 lines
4.3 KiB
C
|
/***************************************************************************
|
||
|
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;
|
||
|
}
|
||
|
}
|
||
|
|