From eea6ff31814c78abf56514f777e714bdfb68306a Mon Sep 17 00:00:00 2001 From: Jeff Hill Date: Fri, 16 Jul 1999 21:09:00 +0000 Subject: [PATCH] fixed bug occurring when connection dropped while waiting to send --- src/ca/vms_depen.c | 10 +++- src/ca/vxWorks_depen.c | 56 +++++++++-------- src/ca/windows_depen.c | 132 ++--------------------------------------- 3 files changed, 45 insertions(+), 153 deletions(-) diff --git a/src/ca/vms_depen.c b/src/ca/vms_depen.c index a95628b23..7186ca350 100644 --- a/src/ca/vms_depen.c +++ b/src/ca/vms_depen.c @@ -32,6 +32,12 @@ * cjm 20-Nov-95 Add code for gettimeofday * * $Log$ + * Revision 1.25.6.1 1999/07/15 21:04:10 jhill + * fixed bug where client disconnects while waiting to send TCP + * + * Revision 1.25 1998/06/16 00:43:12 jhill + * moved code to libCom + * * Revision 1.24 1998/04/13 19:14:35 jhill * fixed task variable problem * @@ -136,7 +142,7 @@ int gettimeofday(struct timeval *tp, struct timezone *tzp) */ void cac_block_for_io_completion(struct timeval *pTV) { - cac_mux_io(pTV); + cac_mux_io(pTV, TRUE); } @@ -169,7 +175,7 @@ void os_specific_sg_io_complete(CASG *pcasg) */ void cac_block_for_sg_completion(CASG *pcasg, struct timeval *pTV) { - cac_mux_io(pTV); + cac_mux_io(pTV, TRUE); } diff --git a/src/ca/vxWorks_depen.c b/src/ca/vxWorks_depen.c index 7bbfc5395..15269730b 100644 --- a/src/ca/vxWorks_depen.c +++ b/src/ca/vxWorks_depen.c @@ -29,6 +29,12 @@ * Modification Log: * ----------------- * $Log$ + * Revision 1.39.4.1 1999/07/15 21:07:33 jhill + * fixed bug where client disconnects while waiting to send TCP + * + * Revision 1.39 1998/09/24 21:22:55 jhill + * subtle changes related to efficency when checking connection timers + * * Revision 1.38 1998/06/16 00:56:03 jhill * moved code from here to libCom * @@ -166,7 +172,7 @@ void cac_block_for_io_completion(struct timeval *pTV) int rate = sysClkRateGet(); #ifdef NOASYNCRECV - cac_mux_io(pTV); + cac_mux_io(pTV, TRUE); #else /* * flush outputs @@ -174,7 +180,7 @@ void cac_block_for_io_completion(struct timeval *pTV) */ itimeout.tv_usec = 0; itimeout.tv_sec = 0; - cac_mux_io (&itimeout); + cac_mux_io (&itimeout, TRUE); ticks = (int) (pTV->tv_sec*rate + (pTV->tv_usec*rate)/USEC_PER_SEC); ticks = min(LOCALTICKS, ticks); @@ -229,31 +235,31 @@ void os_specific_sg_io_complete(CASG *pcasg) */ void cac_block_for_sg_completion(CASG *pcasg, struct timeval *pTV) { - struct timeval itimeout; - int ticks; - int rate = sysClkRateGet(); - + struct timeval itimeout; + int ticks; + int rate = sysClkRateGet(); + #ifdef NOASYNCRECV - cac_mux_io(pTV); + cac_mux_io(pTV, TRUE); #else - /* - * flush outputs - * (recv occurs in another thread) - */ - 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 (pcasg->sem, ticks); - /* - * force a time update because we are not - * going to get one with a nill timeout in - * ca_mux_io() - */ - cac_gettimeval (&ca_static->currentTime); + /* + * flush outputs + * (recv occurs in another thread) + */ + itimeout.tv_usec = 0; + itimeout.tv_sec = 0; + cac_mux_io(&itimeout, TRUE); + + ticks = (int) (pTV->tv_sec*rate + (pTV->tv_usec*rate)/USEC_PER_SEC); + ticks = min(LOCALTICKS, ticks); + + semTake (pcasg->sem, ticks); + /* + * force a time update because we are not + * going to get one with a nill timeout in + * ca_mux_io() + */ + cac_gettimeval (&ca_static->currentTime); #endif } diff --git a/src/ca/windows_depen.c b/src/ca/windows_depen.c index 97b83529a..e5a0c9567 100644 --- a/src/ca/windows_depen.c +++ b/src/ca/windows_depen.c @@ -1,9 +1,9 @@ /* * $Id$ * Author: Jeffrey O. Hill, Chris Timossi - * hill@luke.lanl.gov - * CATimossi@lbl.gov - * (505) 665 1831 + * hill@luke.lanl.gov (505) 665 1831 + * CATimossi@lbl.gov + * * Date: 9-93 * * Experimental Physics and Industrial Control System (EPICS) @@ -29,114 +29,6 @@ * * Lawrence Berkley National Laboratory * - * Modification Log: - * ----------------- - * $Log$ - * Revision 1.43 1998/09/24 23:52:57 jhill - * eliminated DLL run-down call to ca_task_exit() - * - * Revision 1.42 1998/09/24 21:22:56 jhill - * conn.c - * - * Revision 1.41 1998/07/07 23:01:42 jhill - * use high precision timers - * - * Revision 1.40 1998/06/22 22:32:03 jhill - * EPICS_DLL => EPICS_DLL_NO (so we are backwards compatible - * - * Revision 1.39 1998/06/16 00:41:22 jhill - * consolodated code here into libCom - * - * Revision 1.38 1998/05/29 00:03:21 jhill - * allow CA to run systems w/o local interface query capabilities (ie cygwin32) - * - * Revision 1.37 1998/04/15 21:53:02 jhill - * fixed incomplete init problem - * - * Revision 1.36 1998/04/13 19:14:36 jhill - * fixed task variable problem - * - * Revision 1.35 1998/04/10 23:00:57 jhill - * link with user32 lib under WIN32 - * - * Revision 1.34 1998/03/24 20:55:06 jhill - * fixed console title/correct repeater spawn/correct winsock II URL - * - * Revision 1.33 1998/03/12 20:39:11 jhill - * fixed problem where 3.13.beta11 unable to connect to 3.11 with correct native type - * - * Revision 1.32 1998/02/27 01:05:04 jhill - * integrated Timossi's win sock II changes - * - * Revision 1.1.1.3 1996/11/15 17:45:01 timossi - * Interim release from jeff hill - * - * Revision 1.23 1996/11/02 00:51:12 jhill - * many pc port, const in API, and other changes - * - * Revision 1.22 1996/09/16 16:40:13 jhill - * make EPICS version be the console title - * - * Revision 1.21 1996/08/05 19:20:29 jhill - * removed incorrect ver number - * - * Revision 1.20 1995/12/19 19:36:20 jhill - * function prototype changes - * - * Revision 1.19 1995/11/29 19:15:42 jhill - * added $Log$ - * added Revision 1.43 1998/09/24 23:52:57 jhill - * added eliminated DLL run-down call to ca_task_exit() - * added - * added Revision 1.42 1998/09/24 21:22:56 jhill - * added conn.c - * added - * added Revision 1.41 1998/07/07 23:01:42 jhill - * added use high precision timers - * added - * added Revision 1.40 1998/06/22 22:32:03 jhill - * added EPICS_DLL => EPICS_DLL_NO (so we are backwards compatible - * added - * added Revision 1.39 1998/06/16 00:41:22 jhill - * added consolodated code here into libCom - * added - * added Revision 1.38 1998/05/29 00:03:21 jhill - * added allow CA to run systems w/o local interface query capabilities (ie cygwin32) - * added - * added Revision 1.37 1998/04/15 21:53:02 jhill - * added fixed incomplete init problem - * added - * added Revision 1.36 1998/04/13 19:14:36 jhill - * added fixed task variable problem - * added - * added Revision 1.35 1998/04/10 23:00:57 jhill - * added link with user32 lib under WIN32 - * added - * added Revision 1.34 1998/03/24 20:55:06 jhill - * added fixed console title/correct repeater spawn/correct winsock II URL - * added - * added Revision 1.33 1998/03/12 20:39:11 jhill - * added fixed problem where 3.13.beta11 unable to connect to 3.11 with correct native type - * added - * added Revision 1.32 1998/02/27 01:05:04 jhill - * added integrated Timossi's win sock II changes - * added - * Revision 1.1.1.3 1996/11/15 17:45:01 timossi - * Interim release from jeff hill - * - * added Revision 1.23 1996/11/02 00:51:12 jhill - * added many pc port, const in API, and other changes - * added - * added Revision 1.22 1996/09/16 16:40:13 jhill - * added make EPICS version be the console title - * added - * added Revision 1.21 1996/08/05 19:20:29 jhill - * added removed incorrect ver number - * added - * Revision 1.20 1995/12/19 19:36:20 jhill - * function prototype changes - * to the header - * */ #include @@ -159,7 +51,6 @@ static long offset_time; /* time diff (sec) between 1970 and when windows started */ static LARGE_INTEGER time_prev, time_freq; - /* * cac_gettimeval */ @@ -213,16 +104,14 @@ void cac_gettimeval(struct timeval *pt) time_prev = time_cur; } - /* * cac_block_for_io_completion() */ void cac_block_for_io_completion(struct timeval *pTV) { - cac_mux_io(pTV); + cac_mux_io(pTV, TRUE); } - /* * os_specific_sg_io_complete() */ @@ -230,24 +119,22 @@ void os_specific_sg_io_complete(CASG *pcasg) { } - /* * does nothing but satisfy undefined */ void os_specific_sg_create(CASG *pcasg) { } + void os_specific_sg_delete(CASG *pcasg) { } - void cac_block_for_sg_completion(CASG *pcasg, struct timeval *pTV) { - cac_mux_io(pTV); + cac_mux_io(pTV, TRUE); } - /* * ca_task_initialize() */ @@ -300,7 +187,6 @@ int epicsShareAPI ca_task_initialize(void) return ECA_NORMAL; } - /* * ca_task_exit () * @@ -325,7 +211,6 @@ int epicsShareAPI ca_task_exit (void) return ECA_NORMAL; } - /* * * obtain the local user name @@ -351,8 +236,6 @@ char *localUserName() return pTmp; } - - /* * ca_spawn_repeater() */ @@ -461,7 +344,6 @@ void ca_spawn_repeater() //} } - /* * caSetDefaultPrintfHandler () * use the normal default here @@ -473,7 +355,6 @@ void caSetDefaultPrintfHandler () } - /* * * Network interface routines @@ -586,7 +467,6 @@ int local_addr (SOCKET socket, struct sockaddr_in *plcladdr) return -1; } - /* * caDiscoverInterfaces() *