126 lines
3.4 KiB
C++
126 lines
3.4 KiB
C++
/************************************************************************
|
|
* *
|
|
* INTEL CORPORATION PROPRIETARY INFORMATION *
|
|
* *
|
|
* This software is supplied under the terms of a license *
|
|
* agreement or non-disclosure agreement with Intel Corporation *
|
|
* and may not be copied or disclosed except in accordance *
|
|
* with the terms of that agreement. *
|
|
* *
|
|
* Copyright (C) 1997 Intel Corp. All Rights Reserved *
|
|
* *
|
|
* $Archive: S:\sturgeon\src\gki\vcs\retry.cpv $
|
|
* *
|
|
* $Revision: 1.11 $
|
|
* $Date: 12 Feb 1997 01:10:26 $
|
|
* *
|
|
* $Author: CHULME $
|
|
* *
|
|
* $Log: S:\sturgeon\src\gki\vcs\retry.cpv $
|
|
//
|
|
// Rev 1.11 12 Feb 1997 01:10:26 CHULME
|
|
// Redid thread synchronization to use Gatekeeper.Lock
|
|
//
|
|
// Rev 1.10 08 Feb 1997 13:05:10 CHULME
|
|
// Added debug message for thread termination
|
|
//
|
|
// Rev 1.9 08 Feb 1997 12:18:08 CHULME
|
|
// Added Check for semaphore signalling to exit the retry thread
|
|
//
|
|
// Rev 1.8 24 Jan 1997 18:29:44 CHULME
|
|
// Reverted to rev 1.6
|
|
//
|
|
// Rev 1.6 22 Jan 1997 20:45:38 EHOWARDX
|
|
// Work-around for race condition that may result in
|
|
// GKI_RegistrationRequest returning GKI_ALREADY_REG.
|
|
//
|
|
// Rev 1.5 17 Jan 1997 09:02:34 CHULME
|
|
// Changed reg.h to gkreg.h to avoid name conflict with inc directory
|
|
//
|
|
// Rev 1.4 10 Jan 1997 16:16:04 CHULME
|
|
// Removed MFC dependency
|
|
//
|
|
// Rev 1.3 20 Dec 1996 01:28:00 CHULME
|
|
// Fixed memory leak on GK_REG_BYPASS
|
|
//
|
|
// Rev 1.2 22 Nov 1996 15:21:12 CHULME
|
|
// Added VCS log to the header
|
|
*************************************************************************/
|
|
|
|
// retry.cpp : Provides a background retry thread
|
|
//
|
|
#include "precomp.h"
|
|
|
|
#include "gkicom.h"
|
|
#include "dspider.h"
|
|
#include "dgkilit.h"
|
|
#include "DGKIPROT.H"
|
|
#include "gksocket.h"
|
|
#include "GKREG.H"
|
|
#include "GATEKPR.H"
|
|
#include "h225asn.h"
|
|
#include "coder.hpp"
|
|
#include "dgkiext.h"
|
|
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
#if (0)
|
|
void
|
|
Retry(void *pv)
|
|
{
|
|
// ABSTRACT: This function is invoked in a separate thread to
|
|
// periodically check for outstanding PDUs. If a configurable
|
|
// timeout period has expired, the PDU will be reissued. If
|
|
// the maximum number of retries has been exhausted, this thread
|
|
// will clean-up the appropriate memory.
|
|
// AUTHOR: Colin Hulme
|
|
|
|
DWORD dwTime, dwErrorCode;
|
|
#ifdef _DEBUG
|
|
char szGKDebug[80];
|
|
#endif
|
|
HRESULT hResult = GKI_OK;
|
|
HANDLE hRetrySemaphore;
|
|
|
|
SPIDER_TRACE(SP_FUNC, "Retry(pv)\n", 0);
|
|
ASSERT(g_pGatekeeper);
|
|
if(g_pGatekeeper == NULL)
|
|
return;
|
|
|
|
dwTime = g_pGatekeeper->GetRetryMS();
|
|
|
|
g_pGatekeeper->Lock();
|
|
while (hResult == GKI_OK)
|
|
{
|
|
hRetrySemaphore = g_pReg->m_hRetrySemaphore;
|
|
g_pGatekeeper->Unlock();
|
|
dwErrorCode = WaitForSingleObject(hRetrySemaphore, dwTime);
|
|
if(dwErrorCode != WAIT_TIMEOUT)
|
|
{
|
|
SPIDER_TRACE(SP_THREAD, "Retry thread exiting\n", 0);
|
|
return; // Exit thread
|
|
}
|
|
|
|
g_pGatekeeper->Lock();
|
|
if (g_pReg == 0)
|
|
{
|
|
SPIDER_TRACE(SP_THREAD, "Retry thread exiting\n", 0);
|
|
g_pGatekeeper->Unlock();
|
|
return; // Exit thread
|
|
}
|
|
|
|
hResult = g_pReg->Retry();
|
|
}
|
|
|
|
SPIDER_TRACE(SP_NEWDEL, "del g_pReg = %X\n", g_pReg);
|
|
delete g_pReg;
|
|
g_pReg = 0;
|
|
|
|
SPIDER_TRACE(SP_THREAD, "Retry thread exiting\n", 0);
|
|
g_pGatekeeper->Unlock();
|
|
}
|
|
#endif
|