subtle changes related to efficency when checking connection timers

This commit is contained in:
Jeff Hill
1998-09-24 21:22:57 +00:00
parent ef42291613
commit e189a30222
+39 -33
View File
@@ -29,6 +29,9 @@
* Modification Log:
* -----------------
* $Log$
* Revision 1.38 1998/06/16 00:56:03 jhill
* moved code from here to libCom
*
* Revision 1.37 1998/05/08 00:20:56 jhill
* added missing call to freeListCleanup()
*
@@ -158,25 +161,25 @@ void cac_gettimeval(struct timeval *pt)
*/
void cac_block_for_io_completion(struct timeval *pTV)
{
struct timeval itimeout;
struct timeval itimeout;
int ticks;
int rate = sysClkRateGet();
#ifdef NOASYNCRECV
cac_mux_io(pTV);
cac_mux_io(pTV);
#else
/*
* flush outputs
* (recv occurs in another thread)
*/
itimeout.tv_usec = 0;
itimeout.tv_sec = 0;
cac_mux_io(&itimeout);
itimeout.tv_usec = 0;
itimeout.tv_sec = 0;
cac_mux_io (&itimeout);
ticks = (int) (pTV->tv_sec*rate + (pTV->tv_usec*rate)/USEC_PER_SEC);
ticks = min(LOCALTICKS, ticks);
semTake(io_done_sem, ticks);
semTake (io_done_sem, ticks);
/*
* force a time update because we are not
* going to get one with a nill timeout in
@@ -929,25 +932,25 @@ LOCAL void ca_extra_event_labor (void *pArg)
*/
void cac_recv_task(int tid)
{
struct timeval timeout;
int status;
int count;
taskwdInsert((int) taskIdCurrent, NULL, NULL);
status = ca_import(tid);
SEVCHK(status, "cac_recv_task()");
/*
* once started, does not exit until
* ca_task_exit() is called.
*/
while(TRUE){
struct timeval timeout;
int status;
int count;
taskwdInsert((int) taskIdCurrent, NULL, NULL);
status = ca_import(tid);
SEVCHK(status, "cac_recv_task()");
/*
* once started, does not exit until
* ca_task_exit() is called.
*/
while (TRUE) {
#ifdef NOASYNCRECV
taskDelay(60);
taskDelay (60);
#else
cac_clean_iiu_list();
/*
* first check for pending recv's with a
* zero time out so that
@@ -955,28 +958,31 @@ void cac_recv_task(int tid)
* 2) we queue up sends resulting from recvs properly
*/
while (TRUE) {
CLR_CA_TIME (&timeout);
count = cac_select_io(&timeout, CA_DO_RECVS);
CLR_CA_TIME(&timeout);
count = cac_select_io (&timeout, CA_DO_RECVS);
if (count<=0) {
break;
}
ca_process_input_queue();
ca_process_input_queue ();
}
manage_conn ();
/*
* flush out all pending io prior to blocking
*
* NOTE: this must be longer than one vxWorks
* tick or we will infinite loop
*/
timeout.tv_usec = (4/*ticks*/ * USEC_PER_SEC)/sysClkRateGet();
timeout.tv_sec = 0;
count = cac_select_io(&timeout,
CA_DO_RECVS|CA_DO_SENDS);
ca_process_input_queue();
manage_conn();
timeout.tv_usec = (4/*ticks*/ * USEC_PER_SEC)/sysClkRateGet();
timeout.tv_sec = 0;
count = cac_select_io (&timeout, CA_DO_RECVS|CA_DO_SENDS);
ca_process_input_queue ();
checkConnWatchdogs ();
#endif
}
}
}