V10/630/src/ptimeout.c

Compare this file to the similar file:
Show the results in this format:

/*
**	Process timeouts for packets
*/

#include	"pconfig.h"
#include	"proto.h"
#include	"packets.h"
#include	"pstats.h"

void
ptimeout(sig)
	int		sig;
{
	register Pch_p	pcp;
	register Pks_p	psp;
	register int	i;
	register int	retrys;

#	ifndef	Blit
	signal(sig, ptimeout);
#	endif
	Ptflag = 0;

	if ( precvpkt.timo > 0 && ++Ptflag && (precvpkt.timo -= Pscanrate) <= 0 )
	{
		precvpkt.state = PR_NULL;
		ptrace("RECV TIMEOUT");
	}

	for ( pcp = pconvs, retrys = 0 ; pcp < pconvsend && retrys < MAXTIMORETRYS ; pcp++ )
		for ( psp = pcp->nextpkt, i = NPCBUFS ; i-- ; )
		{
			if ( psp->timo > 0 && ++Ptflag && (psp->timo -= Pscanrate) <= 0 )
			{
				ptrace("XMIT TIMEOUT");
				psp->timo = Pxtimeout;
				Pxfunc(&psp->pkt, psp->size);
				PSTATS(PS_TIMOPKT);
				plogpkt(&psp->pkt, PLOGOUT);
				ptrace("END TIMEOUT");
				if ( ++retrys >= MAXTIMORETRYS )
					break;
			}
			if ( ++psp >= &pcp->pkts[NPCBUFS] )
				psp = pcp->pkts;
		}

#	ifndef	Blit
	if ( Ptflag )
		(void)alarm(Pscanrate);
#	endif
}