From 1155631e4059956532e7f79e8d33709a6d0ef866 Mon Sep 17 00:00:00 2001 From: Jeff Hill Date: Thu, 5 Aug 1993 02:14:13 +0000 Subject: [PATCH] merged LANL changes --- src/ca/access.c | 256 ++++++++++++++++++++++++----------------- src/ca/acctst.c | 6 +- src/ca/ca_printf.c | 10 +- src/ca/conn.c | 15 ++- src/ca/flow_control.c | 12 +- src/ca/gsd_sync_subr.c | 12 +- src/ca/iocinf.c | 47 ++++---- src/ca/iocinf.h | 62 ++++------ src/ca/os_depen.h | 78 +++++-------- src/ca/repeater.c | 26 ++--- src/ca/service.c | 42 +++---- 11 files changed, 276 insertions(+), 290 deletions(-) diff --git a/src/ca/access.c b/src/ca/access.c index 5a77017ab..013341abc 100644 --- a/src/ca/access.c +++ b/src/ca/access.c @@ -84,6 +84,9 @@ /* 122192 joh increment outstanding ack count */ /* 050593 joh dont enable deadlock prevention if we are in */ /* post message */ +/* 070293 joh set ca_static to nill at the end of */ +/* ca_process_exit() under all os and not just */ +/* vxWorks */ /* */ /*_begin */ /************************************************************************/ @@ -122,17 +125,13 @@ static char *sccsId = "$Id$\t$Date$"; # include psldef.h # include prcdef.h # include descrip.h -#else -# if defined(UNIX) -# else -# if defined(vxWorks) +#elif defined(UNIX) +#elif defined(vxWorks) # include # include # include -# else +#else @@@@ dont compile @@@@ -# endif -# endif #endif /* @@ -313,7 +312,7 @@ unsigned extsize; * * */ -ca_task_initialize +int ca_task_initialize #ifdef __STDC__ (void) #else @@ -357,8 +356,7 @@ ca_task_initialize if (status != SS$_NORMAL) lib$signal(status); } -#else -# if defined(vxWorks) +#elif defined(vxWorks) { char name[15]; int status; @@ -369,11 +367,11 @@ ca_task_initialize FASTLOCKINIT(&client_lock); FASTLOCKINIT(&event_lock); -# ifdef V5_vxWorks +#ifdef V5_vxWorks io_done_sem = semBCreate(SEM_Q_PRIORITY, SEM_EMPTY); -# else +#else io_done_sem = semCreate(); -# endif +#endif if(!io_done_sem){ abort(); } @@ -396,12 +394,9 @@ ca_task_initialize if (status != OK) abort(); } -# else -# if defined(UNIX) -# else +#elif defined(UNIX) +#else @@@@ dont compile in this case @@@@ -# endif -# endif #endif } @@ -610,7 +605,7 @@ ca_add_task_variable() * call this routine if you wish to free resources prior to task * exit- ca_task_exit() is also executed routinely at task exit. */ -ca_task_exit +int ca_task_exit #ifdef __STDC__ (void) #else @@ -766,9 +761,9 @@ ca_process_exit() * Cancel all local events */ # ifdef vxWorks - chix = (chid) & ca_temp->ca_local_chidlist; + chix = (chid) & ca_temp->ca_local_chidlist.node; while (chix = (chid) chix->node.next){ - while (monix = (evid) ellGet(&chix->eventq)) { + while (monix = (evid) dllGet(&chix->eventq)) { status = db_cancel_event(monix + 1); if (status == ERROR) abort(); @@ -790,7 +785,7 @@ ca_process_exit() "could not close event facility by id"); } - ellFree(&ca_temp->ca_lcl_buff_list); + dllFree(&ca_temp->ca_lcl_buff_list); # endif /* @@ -814,8 +809,8 @@ ca_process_exit() * remove remote chid blocks and event blocks */ for (i = 0; i < ca_temp->ca_nxtiiu; i++) { - while (chix = (chid) ellGet(&ca_temp->ca_iiu[i].chidlist)) { - while (monix = (evid) ellGet(&chix->eventq)) { + while (chix = (chid) dllGet(&ca_temp->ca_iiu[i].chidlist)) { + while (monix = (evid) dllGet(&chix->eventq)) { free((char *)monix); } free((char *)chix); @@ -826,15 +821,15 @@ ca_process_exit() * remove local chid blocks, paddr blocks, waiting ev blocks */ # ifdef vxWorks - while (chix = (chid) ellGet(&ca_temp->ca_local_chidlist)) + while (chix = (chid) dllGet(&ca_temp->ca_local_chidlist)) free((char *)chix); - ellFree(&ca_temp->ca_dbfree_ev_list); + dllFree(&ca_temp->ca_dbfree_ev_list); # endif /* remove remote waiting ev blocks */ - ellFree(&ca_temp->ca_free_event_list); + dllFree(&ca_temp->ca_free_event_list); /* remove any pending read blocks */ - ellFree(&ca_temp->ca_pend_read_list); + dllFree(&ca_temp->ca_pend_read_list); /* * force this macro to use ca_temp @@ -859,7 +854,9 @@ ca_process_exit() semDelete(ca_temp->ca_io_done_sem); # endif # endif + free((char *)ca_temp); + ca_static = (struct ca_static *) NULL; /* * Only remove task variable if user is calling this from @@ -874,8 +871,6 @@ ca_process_exit() if (tid == taskIdSelf()) { int status; - ca_static = (struct ca_static *) NULL; - status = taskVarDelete(tid, &ca_static); if (status == ERROR) ca_signal( @@ -901,17 +896,17 @@ int ca_build_and_connect ( char *name_str, chtype get_type, - unsigned int get_count, + unsigned long get_count, chid * chixptr, void *pvalue, - void (*conn_func) (), + void (*conn_func) (struct connection_handler_args), void *puser ) #else (name_str, get_type, get_count, chixptr, pvalue, conn_func, puser) char *name_str; - chtype get_type; - unsigned int get_count; + chtype get_type; + unsigned long get_count; chid *chixptr; void *pvalue; void (*conn_func) (); @@ -977,7 +972,7 @@ int ca_build_and_connect chix->paddr)->no_elements; chix->iocix = LOCAL_IIU; chix->state = cs_conn; - ellInit(&chix->eventq); + dllInit(&chix->eventq); strncpy(chix + 1, name_str, strcnt); /* check for just a search */ @@ -995,7 +990,7 @@ int ca_build_and_connect } } LOCK; - ellAdd(&local_chidlist, chix); + dllAdd(&local_chidlist, chix); UNLOCK; if (chix->connection_func) { @@ -1044,12 +1039,12 @@ int ca_build_and_connect chix->build_value = (void *) pvalue; chix->name_length = strcnt; chix->state = cs_never_conn; - ellInit(&chix->eventq); + dllInit(&chix->eventq); /* Save this channels name for retry if required */ strncpy(chix + 1, name_str, strcnt); - ellAdd(&iiu[BROADCAST_IIU].chidlist, (ELLNODE *)chix); + dllAdd(&iiu[BROADCAST_IIU].chidlist, chix); /* * set the conn tries back to zero so this channel's location * can be found @@ -1144,17 +1139,17 @@ void build_msg(chix, reply_type) ca_array_get #ifdef __STDC__ ( - chtype type, - unsigned int count, - chid chix, - register void *pvalue +chtype type, +unsigned long count, +chid chix, +void *pvalue ) #else (type, count, chix, pvalue) chtype type; - unsigned int count; + unsigned long count; chid chix; - register void *pvalue; + void *pvalue; #endif { register struct extmsg *mptr; @@ -1228,19 +1223,19 @@ ca_array_get * * */ -int ca_array_get_callback +ca_array_get_callback #ifdef __STDC__ ( chtype type, - unsigned int count, + unsigned long count, chid chix, - void (*pfunc) (), + void (*pfunc) (struct event_handler_args), void *arg ) #else (type, count, chix, pfunc, arg) chtype type; - unsigned int count; + unsigned long count; chid chix; void (*pfunc) (); void *arg; @@ -1273,7 +1268,7 @@ int ca_array_get_callback #endif LOCK; - if (!(monix = (evid) ellGet(&free_event_list))) + if (!(monix = (evid) dllGet(&free_event_list))) monix = (evid) malloc(sizeof *monix); if (monix) { @@ -1284,7 +1279,7 @@ int ca_array_get_callback monix->type = type; monix->count = count; - ellAdd(&pend_read_list, (ELLNODE *)monix); + dllAdd(&pend_read_list, monix); issue_get_callback(monix); @@ -1364,20 +1359,20 @@ issue_get_callback(monix) * * */ -int ca_array_put +ca_array_put #ifdef __STDC__ ( chtype type, -unsigned int count, +unsigned long count, chid chix, void *pvalue ) #else (type,count,chix,pvalue) -register chtype type; -unsigned int count; +chtype type; +unsigned long count; chid chix; -register void *pvalue; +void *pvalue; #endif { register struct extmsg *mptr; @@ -1525,7 +1520,7 @@ ca_change_connection_event #ifdef __STDC__ ( chid chix, -void (*pfunc)() +void (*pfunc)(struct connection_handler_args) ) #else (chix, pfunc) @@ -1567,7 +1562,7 @@ void (*pfunc)(); ca_add_exception_event #ifdef __STDC__ ( -void (*pfunc)(), +void (*pfunc)(struct exception_handler_args), void *arg ) #else @@ -1627,7 +1622,7 @@ void *astarg; return ECA_ALLOCMEM; pioe->io_done_arg = astarg; pioe->io_done_sub = ast; - ellAdd(&ioeventlist,(ELLNODE *)pioe); + dllAdd(&ioeventlist,pioe); UNLOCK; } @@ -1642,13 +1637,13 @@ void *astarg; * * */ -int ca_add_masked_array_event +ca_add_masked_array_event #ifdef __STDC__ ( chtype type, -unsigned int count, +unsigned long count, chid chix, -void (*ast)(), +void (*ast)(struct event_handler_args), void *astarg, ca_real p_delta, ca_real n_delta, @@ -1659,7 +1654,7 @@ long mask #else (type,count,chix,ast,astarg,p_delta,n_delta,timeout,monixptr,mask) chtype type; -unsigned int count; +unsigned long count; chid chix; void (*ast)(); void *astarg; @@ -1667,7 +1662,7 @@ ca_real p_delta; ca_real n_delta; ca_real timeout; evid *monixptr; -unsigned mask; +long mask; #endif { register evid monix; @@ -1697,15 +1692,15 @@ unsigned mask; dbevsize = db_sizeof_event_block(); - if(!(monix = (evid)ellGet(&dbfree_ev_list))) + if(!(monix = (evid)dllGet(&dbfree_ev_list))) monix = (evid)malloc(sizeof(*monix)+dbevsize); } else - if(!(monix = (evid)ellGet(&free_event_list))) + if(!(monix = (evid)dllGet(&free_event_list))) monix = (evid)malloc(sizeof *monix); } # else - if(!(monix = (evid)ellGet(&free_event_list))) + if(!(monix = (evid)dllGet(&free_event_list))) monix = (evid) malloc(sizeof *monix); # endif @@ -1750,7 +1745,7 @@ unsigned mask; is no chance that it will be deleted at exit before it is completely created */ - ellAdd(&chix->eventq, monix); + dllAdd(&chix->eventq, monix); /* force event to be called at least once @@ -1771,7 +1766,7 @@ unsigned mask; /* It can be added to the list any place if it is remote */ /* Place in the channel list */ - ellAdd(&chix->eventq, (ELLNODE *)monix); + dllAdd(&chix->eventq, monix); ca_request_event(monix); @@ -1867,7 +1862,7 @@ void *pfl; void *pval; register unsigned size; struct tmp_buff{ - ELLNODE node; + NODE node; unsigned size; }; struct tmp_buff *pbuf = NULL; @@ -1906,7 +1901,7 @@ void *pfl; pbuf = (struct tmp_buff *) lcl_buff_list.node.next; if(pbuf->size >= size){ - ellDelete( + dllDelete( &lcl_buff_list, pbuf); }else @@ -1986,7 +1981,7 @@ void *pfl; if(ptbuf) ptbuf = (struct tmp_buff *) ptbuf->node.previous; - ellInsert( + dllInsert( &lcl_buff_list, ptbuf, pbuf); @@ -2014,12 +2009,12 @@ void *pfl; * after leaving this routine. * */ -ca_clear_event +int ca_clear_event #ifdef __STDC__ -(register evid monix) +(evid monix) #else (monix) - register evid monix; +evid monix; #endif { register chid chix = monix->chan; @@ -2038,16 +2033,16 @@ ca_clear_event * dont allow two threads to delete the same moniitor at once */ LOCK; - status = ellFind(&chix->eventq, monix); + status = dllFind(&chix->eventq, monix); if (status != ERROR) { - ellDelete(&chix->eventq, monix); + dllDelete(&chix->eventq, monix); status = db_cancel_event(monix + 1); } UNLOCK; if (status == ERROR) return ECA_BADMONID; - ellAdd(&dbfree_ev_list, monix); + dllAdd(&dbfree_ev_list, monix); return ECA_NORMAL; } @@ -2091,7 +2086,7 @@ ca_clear_event piiu->outstanding_ack_count++; } else{ - ellDelete(&monix->chan->eventq, (ELLNODE *)monix); + dllDelete(&monix->chan->eventq, monix); } UNLOCK; @@ -2115,10 +2110,10 @@ ca_clear_event */ ca_clear_channel #ifdef __STDC__ -(register chid chix) +(chid chix) #else (chix) - register chid chix; +chid chix; #endif { register evid monix; @@ -2155,17 +2150,17 @@ ca_clear_channel /* * clear out the events for this channel */ - while (monix = (evid) ellGet(&chix->eventq)) { + while (monix = (evid) dllGet(&chix->eventq)) { status = db_cancel_event(monix + 1); if (status == ERROR) abort(); - ellAdd(&dbfree_ev_list, monix); + dllAdd(&dbfree_ev_list, monix); } /* * clear out this channel */ - ellDelete(&local_chidlist, chix); + dllDelete(&local_chidlist, chix); free((char *) chix); break; /* to unlock exit */ @@ -2179,8 +2174,8 @@ ca_clear_channel * check for conn state while locked to avoid a race */ if(old_chan_state != cs_conn){ - ellConcat(&free_event_list, &chix->eventq); - ellDelete(&piiu->chidlist, (ELLNODE *)chix); + dllConcat(&free_event_list, &chix->eventq); + dllDelete(&piiu->chidlist, chix); if (chix->iocix != BROADCAST_IIU && !piiu->chidlist.count){ close_ioc(piiu); @@ -2255,9 +2250,9 @@ ca_clear_channel /* ca_flush_io() is called by this routine. */ /************************************************************************/ #ifdef __STDC__ -int ca_pend(ca_real timeout, int early) +ca_pend(ca_real timeout, int early) #else -int ca_pend(timeout, early) +ca_pend(timeout, early) ca_real timeout; int early; #endif @@ -2321,7 +2316,7 @@ int early; beg_time = time(NULL); while(TRUE){ -#if defined(UNIX) +# if defined(UNIX) { struct timeval itimeout; @@ -2331,18 +2326,16 @@ int early; recv_msg_select(&itimeout); UNLOCK; } -#else -# if defined(vxWorks) -# ifdef V5_vxWorks +# elif defined(vxWorks) +#ifdef V5_vxWorks semTake(io_done_sem, LOCALTICKS); -# else +#else { int dummy; vrtxPend(&io_done_sem->count, LOCALTICKS, &dummy); } -# endif -# else -# if defined(VMS) +#endif +# elif defined(VMS) { int status; unsigned int systim[2]={-LOCALTICKS,~0}; @@ -2359,11 +2352,9 @@ int early; if(status != SS$_NORMAL) lib$signal(status); } -# else +# else @@@@ dont compile in this case @@@@ -# endif -# endif -#endif +# endif LOCK; manage_conn(TRUE); @@ -2436,7 +2427,7 @@ ca_pend_io_cleanup() * * */ -ca_flush_io +int ca_flush_io #ifdef __STDC__ (void) #else @@ -2502,7 +2493,7 @@ void ca_signal_with_file_and_lineno(ca_status,message,pfilenm,lineno) int ca_status; char *message; char *pfilenm; -unsigned lineno; +int lineno; #endif { static char *severity[] = @@ -2579,7 +2570,7 @@ unsigned lineno; */ void ca_busy_message(piiu) - register struct ioc_in_use *piiu; +struct ioc_in_use *piiu; { struct extmsg *mptr; @@ -2610,7 +2601,7 @@ ca_busy_message(piiu) */ void ca_ready_message(piiu) - register struct ioc_in_use *piiu; +struct ioc_in_use *piiu; { struct extmsg *mptr; @@ -2759,3 +2750,62 @@ chid chix; { return iiu[chix->iocix].host_name_str; } + + + + +/* + * + * CA_CHANNEL_STATUS + * + */ +#ifdef vxWorks +int ca_channel_status(tid) +int tid; +{ + int i; + chid chix; + struct ca_static *pcas; + + pcas = (struct ca_static *) + taskVarGet(tid, &ca_static); + + if (pcas == (struct ca_static *) ERROR) + return ECA_NOCACTX; + + for (i = 0; i < pcas->ca_nxtiiu; i++) { +# define ca_static pcas + LOCK +# undef ca_static + chix = (chid) &pcas->ca_iiu[i].chidlist.node; + while (chix = (chid) chix->node.next){ + printf( "%s native type=%d ", + ca_name(chix), + ca_field_type(chix)); + printf( "N elements=%d IOC=%s state=", + ca_element_count(chix), + pcas->ca_iiu[i].host_name_str); + switch(ca_state(chix)){ + case cs_never_conn: + printf("never connected to an IOC"); + break; + case cs_prev_conn: + printf("disconnected from IOC"); + break; + case cs_conn: + printf("connected to an IOC"); + break; + case cs_closed: + printf("invalid channel"); + break; + default: + } + printf("\n"); + } +# define ca_static pcas + UNLOCK +# undef ca_static + } + return ECA_NORMAL; +} +#endif vxWorks diff --git a/src/ca/acctst.c b/src/ca/acctst.c index e8412b72f..17608ce8f 100644 --- a/src/ca/acctst.c +++ b/src/ca/acctst.c @@ -1,4 +1,4 @@ -static char *sccsId = "$Id$\t$Date$"; +static char *sccsId = "@(#)acctst.c 1.8\t2/19/93"; /* * CA test/debug routine @@ -20,11 +20,9 @@ static char *sccsId = "$Id$\t$Date$"; /* System includes */ #if defined(UNIX) # include -#else -# if defined(vxWorks) +#elif defined(vxWorks) # include # include -# endif #endif #include diff --git a/src/ca/ca_printf.c b/src/ca/ca_printf.c index 7d25cb70f..0b5f1f5c9 100644 --- a/src/ca/ca_printf.c +++ b/src/ca/ca_printf.c @@ -2,10 +2,8 @@ static char *sccsId = "@(#)ca_printf.c 1.2\t7/27/92"; #if defined(UNIX) || defined(VMS) # include -#else -# if defined(vxWorks) +#elif defined(vxWorks) # include -# endif #endif #include @@ -37,8 +35,7 @@ va_dcl pformat, args); } -# else -# if defined(vxWorks) +# elif defined(vxWorks) { int logMsgArgs[6]; int i; @@ -58,9 +55,8 @@ va_dcl logMsgArgs[6]); } -# else +# else #### dont compile in this case #### -# endif # endif va_end(args); diff --git a/src/ca/conn.c b/src/ca/conn.c index da1bd62eb..7171c3f54 100644 --- a/src/ca/conn.c +++ b/src/ca/conn.c @@ -19,6 +19,7 @@ /* .05 072792 joh better messages */ /* .06 111892 joh tuned up cast retries */ /* .07 010493 joh print retry count when `' */ +/* .08 010493 joh removed `' message */ /* */ /*_begin */ /************************************************************************/ @@ -37,15 +38,11 @@ static char *sccsId = "$Id$\t$Date$"; #if defined(UNIX) # include -#else -# if defined(VMS) -# else -# if defined(vxWorks) +#elif defined(VMS) +#elif defined(vxWorks) #include -# else +#else @@@@ dont compile @@@@ -# endif -# endif #endif #include @@ -139,10 +136,12 @@ char silent; } if(retry_cnt){ +#ifdef TRYING_MESSAGE ca_printf(" ", retry_cnt); #ifdef UNIX fflush(stdout); -#endif +#endif UNIX +#endif TRYING_MESSAGE if(!silent && retry_cnt_no_handler){ sprintf(sprintf_buf, "%d channels outstanding", retry_cnt); diff --git a/src/ca/flow_control.c b/src/ca/flow_control.c index a95193b6b..6fedb621a 100644 --- a/src/ca/flow_control.c +++ b/src/ca/flow_control.c @@ -33,7 +33,7 @@ /************************************************************************/ /*_end */ -static char *sccsId = "$Id$\t$Date$"; +static char *sccsId = "@(#)flow_control.c 1.7\t6/2/93"; #if defined(vxWorks) # include @@ -43,8 +43,7 @@ static char *sccsId = "$Id$\t$Date$"; # ifndef V5_vxWorks # include # endif -#else -# if defined(VMS) +#elif defined(VMS) # include # include # if defined(UCX) /* GeG 09-DEC-1992 */ @@ -53,15 +52,12 @@ static char *sccsId = "$Id$\t$Date$"; # else # include # endif -# else -# if defined(UNIX) +#elif defined(UNIX) # include # include # include -# else +#else @@@@ dont compile @@@@ -# endif -# endif #endif #include diff --git a/src/ca/gsd_sync_subr.c b/src/ca/gsd_sync_subr.c index b7f85f333..db8f95366 100644 --- a/src/ca/gsd_sync_subr.c +++ b/src/ca/gsd_sync_subr.c @@ -88,22 +88,20 @@ static char *sccsId = "@(#)gsd_sync_subr.c 1.8\t11/5/92"; # include # include # include -#else -# if defined(vxWorks) +#elif defined(vxWorks) # define abort(A) taskSuspend(taskIdSelf()) -# ifdef V5vxWorks +#ifdef V5vxWorks # include -# else +#else # include -# endif +#endif # if 0 /* needed ?? */ # include # include # include # endif -# else +#else @@@@ dont compile in this case @@@@ -# endif #endif #include diff --git a/src/ca/iocinf.c b/src/ca/iocinf.c index 120662400..f42cee2da 100644 --- a/src/ca/iocinf.c +++ b/src/ca/iocinf.c @@ -69,7 +69,6 @@ static char *sccsId = "$Id$\t$Date$"; /* Allocate storage for global variables in this module */ #define CA_GLBLSOURCE - #if defined(VMS) # include # include @@ -80,23 +79,21 @@ static char *sccsId = "$Id$\t$Date$"; # include # include # include -# if defined(UCX) /* GeG 09-DEC-1992 */ +#if defined(UCX) /* GeG 09-DEC-1992 */ # include # include -# else +#else # include # include -# endif -#else -# if defined(UNIX) +#endif +#elif defined(UNIX) # include # include # include # include # include # include -# else -# if defined(vxWorks) +#elif defined(vxWorks) # include # ifdef V5_vxWorks # include @@ -110,11 +107,8 @@ static char *sccsId = "$Id$\t$Date$"; # include # include # include -# endif -# endif #endif - #include #include #include @@ -128,7 +122,6 @@ static void tcp_recv_msg(); static void udp_recv_msg(); static void notify_ca_repeater(); static int cac_send_msg_piiu(); -static int create_net_chan(); #ifdef VMS void vms_recv_msg_ast(); #endif @@ -137,16 +130,16 @@ void vms_recv_msg_ast(); /* * used to be that some TCP/IPs did not include this */ -#ifndef NBBY -# define NBBY 8 /* number of bits per byte */ -#endif - #ifdef JUNKYARD typedef long fd_mask; typedef struct fd_set { fd_mask fds_bits[64]; } fd_set; +#ifndef NBBY +# define NBBY 8 /* number of bits per byte */ +#endif + #ifndef NFDBITS #define NFDBITS (sizeof(int) * NBBY) /* bits per mask */ #endif @@ -526,7 +519,7 @@ struct ioc_in_use *piiu; /* Set up recv thread for VMS */ -#if defined(VMS) +# if defined(VMS) { /* * request to be informed of future IO @@ -549,8 +542,7 @@ struct ioc_in_use *piiu; exit(); } } -#else -# if defined(vxWorks) +# elif defined(vxWorks) { static void recv_task(); int pri; @@ -580,8 +572,7 @@ struct ioc_in_use *piiu; piiu->recv_tid = status; } -# endif -#endif +# endif return ECA_NORMAL; } @@ -676,14 +667,12 @@ void cac_send_msg() * frees up push pull deadlock only * if recv not already in progress */ -#if defined(UNIX) +# if defined(UNIX) if(post_msg_active==0){ recv_msg_select(¬imeout); } -#else -# if defined(vxWorks) -# endif -#endif +# elif defined(vxWorks) +# endif done = TRUE; for(piiu=iiu; piiu<&iiu[nxtiiu]; piiu++){ @@ -875,7 +864,7 @@ void recv_msg_select(ptimeout) struct timeval *ptimeout; { - int status; + long status; register struct ioc_in_use *piiu; struct timeval *ptmptimeout; @@ -1189,6 +1178,8 @@ int moms_tid; { int status; + taskwdInsert((int) taskIdCurrent, NULL, NULL); + status = taskVarAdd(VXTHISTASKID, &ca_static); if(status == ERROR) abort(); @@ -1216,6 +1207,8 @@ int moms_tid; if(status == ERROR) abort(); + taskwdRemove((int) taskIdCurrent, NULL, NULL); + exit(); } #endif diff --git a/src/ca/iocinf.h b/src/ca/iocinf.h index ea71ef246..fe12a5486 100644 --- a/src/ca/iocinf.h +++ b/src/ca/iocinf.h @@ -52,33 +52,31 @@ #ifndef INCiocinfh #define INCiocinfh -static char *iocinfhSccsId = "$Id$\t$Date$"; +static char *iocinfhSccsId = "@(#)iocinf.h 1.15\t6/2/93"; #define DONT_COMPILE @@@@ dont compile in this case @@@@ #if defined(UNIX) # include # include -#else -# if defined(VMS) +#elif defined(VMS) # include # include # include -# else -# if defined(vxWorks) +#elif defined(vxWorks) # ifdef V5_vxWorks # include # else # include # endif # include -# else +#else DONT_COMPILE -# endif -# endif #endif -# include +#ifndef INCdllLibh +# include +#endif #ifndef INCos_depenh # include @@ -116,7 +114,7 @@ struct buffer{ #define BROADCAST_IIU 0 struct pending_io_event{ - ELLNODE node; + NODE node; void (*io_done_sub)(); void *io_done_arg; }; @@ -152,8 +150,7 @@ typedef unsigned long ca_time; # define readch (ca_static->ca_readch) # define writech (ca_static->ca_writech) # define excepch (ca_static->ca_excepch) -#else -# if defined(vxWorks) +#elif defined(vxWorks) # define io_done_sem (ca_static->ca_io_done_sem) # define evuser (ca_static->ca_evuser) # define client_lock (ca_static->ca_client_lock) @@ -162,22 +159,19 @@ typedef unsigned long ca_time; # define dbfree_ev_list (ca_static->ca_dbfree_ev_list) # define lcl_buff_list (ca_static->ca_lcl_buff_list) # define event_tid (ca_static->ca_event_tid) -# else -# if defined(VMS) +#elif defined(VMS) # define io_done_flag (ca_static->ca_io_done_flag) # define peek_ast_buf (ca_static->ca_peek_ast_buf) # define ast_lock_count (ca_static->ca_ast_lock_count) -# else +#else DONT_COMPILE -# endif -# endif #endif struct ca_static{ unsigned short ca_nxtiiu; long ca_pndrecvcnt; - ELLLIST ca_ioeventlist; + LIST ca_ioeventlist; void (*ca_exception_func)(); void *ca_exception_arg; void (*ca_connection_func)(); @@ -186,8 +180,8 @@ struct ca_static{ void *ca_fd_register_arg; short ca_exit_in_progress; unsigned short ca_post_msg_active; - ELLLIST ca_free_event_list; - ELLLIST ca_pend_read_list; + LIST ca_free_event_list; + LIST ca_pend_read_list; short ca_repeater_contacted; unsigned short ca_send_msg_active; short ca_cast_available; @@ -196,27 +190,23 @@ struct ca_static{ #if defined(UNIX) fd_set ca_readch; fd_set ca_excepch; -#else -# if defined(VMS) +#elif defined(VMS) int ca_io_done_flag; char ca_peek_ast_buf; long ca_ast_lock_count; -# else -# if defined(vxWorks) +#elif defined(vxWorks) SEM_ID ca_io_done_sem; void *ca_evuser; FAST_LOCK ca_client_lock; FAST_LOCK ca_event_lock; /* dont allow events to preempt */ int ca_tid; - ELLLIST ca_local_chidlist; - ELLLIST ca_dbfree_ev_list; - ELLLIST ca_lcl_buff_list; + LIST ca_local_chidlist; + LIST ca_dbfree_ev_list; + LIST ca_lcl_buff_list; int ca_event_tid; unsigned ca_local_ticks; -# else +#else DONT_COMPILE -# endif -# endif #endif struct ioc_in_use{ unsigned outstanding_ack_count; @@ -233,7 +223,7 @@ struct ca_static{ struct buffer *recv; unsigned read_seq; unsigned cur_read_seq; - ELLLIST chidlist; /* chans on this connection */ + LIST chidlist; /* chans on this connection */ short conn_up; /* boolean: T-conn /F-disconn */ short send_needed; /* CA needs a send */ char host_name_str[32]; @@ -244,15 +234,11 @@ struct ca_static{ #if defined(VMS) /* for qio ASTs */ struct sockaddr_in recvfrom; struct iosb iosb; -#else -# if defined(vxWorks) +#elif defined(vxWorks) int recv_tid; -# else -# if defined(UNIX) -# else +#elif defined(UNIX) +#else DONT_COMPILE -# endif -# endif #endif } ca_iiu[MAXIIU]; }; diff --git a/src/ca/os_depen.h b/src/ca/os_depen.h index 6bae8457d..da2a5f96d 100644 --- a/src/ca/os_depen.h +++ b/src/ca/os_depen.h @@ -29,7 +29,7 @@ #ifndef INCos_depenh #define INCos_depenh -static char *os_depenhSccsId = "$Id$\t$Date$"; +static char *os_depenhSccsId = "@(#)os_depen.h 1.12\t2/19/93"; #if defined(UNIX) # ifndef _sys_time_h @@ -38,8 +38,7 @@ static char *os_depenhSccsId = "$Id$\t$Date$"; # ifndef _sys_errno_h # include # endif -#else -# if defined(vxWorks) +#elif defined(vxWorks) # ifndef INCvxWorksh # include # endif @@ -52,12 +51,9 @@ static char *os_depenhSccsId = "$Id$\t$Date$"; # ifndef V5_vxWorks IMPORT ULONG taskIdCurrent; # endif -# else -# if defined(VMS) -# else +#elif defined(VMS) +#else @@@@ dont compile in this case @@@@ -# endif -# endif #endif @@ -113,8 +109,7 @@ static char *os_depenhSccsId = "$Id$\t$Date$"; # define UNLOCKEVENTS # define EVENTLOCKTEST (post_msg_active!=0) # define RECV_ACTIVE(PIIU) (piiu->active) -#else -# if defined(vxWorks) +#elif defined(vxWorks) # define VXTASKIDNONE 0 # define LOCK FASTLOCK(&client_lock); # define UNLOCK FASTUNLOCK(&client_lock); @@ -122,18 +117,15 @@ static char *os_depenhSccsId = "$Id$\t$Date$"; # define UNLOCKEVENTS {event_tid=VXTASKIDNONE; FASTUNLOCK(&event_lock);} # define EVENTLOCKTEST (FASTLOCKTEST(&event_lock)&&taskIdCurrent==event_tid) # define RECV_ACTIVE(PIIU) (piiu->recv_tid == taskIdCurrent) -# else -# if defined(UNIX) +#elif defined(UNIX) # define LOCK # define UNLOCK # define LOCKEVENTS # define UNLOCKEVENTS # define EVENTLOCKTEST (post_msg_active!=0) # define RECV_ACTIVE(PIIU) (piiu->active) -# else +#else @@@@ dont compile in this case @@@@ -# endif -# endif #endif #ifdef vxWorks @@ -145,29 +137,23 @@ static char *os_depenhSccsId = "$Id$\t$Date$"; #if defined(VMS) -# if defined(WINTCP) /* Wallangong */ +# if defined(WINTCP) /* Wallangong */ /* (the VAXC runtime lib has its own close */ # define socket_close(S) netclose(S) # define socket_ioctl(A,B,C) ioctl(A,B,C) -# else -# if defined(UCX) /* GeG 09-DEC-1992 */ +# elif defined(UCX) /* GeG 09-DEC-1992 */ # define socket_close(S) close(S) # define socket_ioctl(A,B,C) ioctl(A,B,C) -# else -# endif -# endif +# else +# endif +#elif defined(UNIX) +# define socket_close(S) close(S) +# define socket_ioctl(A,B,C) ioctl(A,B,C) +#elif defined(vxWorks) +# define socket_close(S) close(S) +# define socket_ioctl(A,B,C) ioctl(A,B,C) #else -# if defined(UNIX) -# define socket_close(S) close(S) -# define socket_ioctl(A,B,C) ioctl(A,B,C) -# else -# if defined(vxWorks) -# define socket_close(S) close(S) -# define socket_ioctl(A,B,C) ioctl(A,B,C) -# else @@@@ dont compile in this case @@@@ -# endif -# endif #endif #if defined(VMS) @@ -178,15 +164,11 @@ static char *os_depenhSccsId = "$Id$\t$Date$"; extern volatile int noshare socket_errno; # define MYERRNO socket_errno # endif -#else -# if defined(vxWorks) +#elif defined(vxWorks) # define MYERRNO (errnoGet()&0xffff) -# else -# if defined(UNIX) +#elif defined(UNIX) extern int errno; # define MYERRNO errno -# endif -# endif #endif #ifdef VMS @@ -201,19 +183,15 @@ static char *os_depenhSccsId = "$Id$\t$Date$"; #if defined(vxWorks) -# ifdef V5_vxWorks +#ifdef V5_vxWorks # define POST_IO_EV semGive(io_done_sem) -# else -# define POST_IO_EV vrtxPost(&io_done_sem->count, TRUE) -# endif #else -# if defined(VMS) +# define POST_IO_EV vrtxPost(&io_done_sem->count, TRUE) +#endif +#elif defined(VMS) # define POST_IO_EV sys$setef(io_done_flag) -# else -# if defined(UNIX) +#elif defined(UNIX) # define POST_IO_EV -# endif -# endif #endif /* delay for when a poll is used */ @@ -241,13 +219,11 @@ static char *os_depenhSccsId = "$Id$\t$Date$"; status = sys$waitfr(ef); \ if(~status&STS$M_SUCCESS)lib$signal(status); \ }; -#else -# if defined(vxWorks) +#elif defined(vxWorks) # define SYSFREQ ((long) sysClkRateGet()) /* usually 60 Hz */ # define TCPDELAY taskDelay(ca_static->ca_local_ticks); # define time(A) (tickGet()/SYSFREQ) -# else -# if defined(UNIX) +#elif defined(UNIX) # define SYSFREQ 1000000L /* 1 MHz */ /* * this version of TCPDELAY copies tcpdelayval into temporary storage @@ -269,8 +245,6 @@ static char *os_depenhSccsId = "$Id$\t$Date$"; # else extern struct timeval tcpdelayval; # endif -# endif -# endif #endif #endif diff --git a/src/ca/repeater.c b/src/ca/repeater.c index 6b6a990df..d988d45ac 100644 --- a/src/ca/repeater.c +++ b/src/ca/repeater.c @@ -67,26 +67,22 @@ static char *sccsId = "$Id$\t$Date$"; # include # include # include -#else -# if defined(UNIX) +#elif defined(UNIX) # include # include # include # include -# else -# if defined(vxWorks) +#elif defined(vxWorks) # include # include # include # include # include -# else +#else @@@@ dont compile @@@@ -# endif -# endif #endif -#include +#include #include #include @@ -95,12 +91,12 @@ static char *sccsId = "$Id$\t$Date$"; * per machine so we dont care about reentrancy */ struct one_client{ - ELLNODE node; + NODE node; struct sockaddr_in from; }; static -ELLLIST client_list; +LIST client_list; static char buf[MAX_UDP]; @@ -176,7 +172,7 @@ ca_repeater() struct one_client *pclient; struct one_client *pnxtclient; - ellInit(&client_list); + dllInit(&client_list); /* allocate a socket */ sock = socket( AF_INET, /* domain */ @@ -215,6 +211,10 @@ ca_repeater() return FALSE; } +# ifdef vxWorks + taskwdInsert((int)taskIdCurrent, NULL, NULL); +# endif + #ifdef DEBUG ca_printf("CA Repeater: Attached and initialized\n"); #endif @@ -274,7 +274,7 @@ ca_repeater() malloc(sizeof *pclient); if(pclient){ pclient->from = from; - ellAdd(&client_list, (ELLNODE *)pclient); + dllAdd(&client_list, pclient); #ifdef DEBUG ca_printf("Added %x %d\n", from.sin_port, size); #endif @@ -356,7 +356,7 @@ struct one_client *pclient; socket_close(sock); if(!present){ - ellDelete(&client_list, (ELLNODE *)pclient); + dllDelete(&client_list, pclient); free(pclient); #ifdef DEBUG ca_printf("Deleted\n"); diff --git a/src/ca/service.c b/src/ca/service.c index 52fc283f2..9eca8644b 100644 --- a/src/ca/service.c +++ b/src/ca/service.c @@ -68,25 +68,21 @@ /************************************************************************/ /*_end */ -static char *sccsId = "$Id$\t$Date$"; +static char *sccsId = "@(#)service.c 1.17\t6/2/93"; #if defined(VMS) # include # include -#else -# if defined(UNIX) +#elif defined(UNIX) # include # include -# else -# if defined(vxWorks) +#elif defined(vxWorks) # include # ifndef V5_vxWorks # include # endif -# else +#else @@@@ dont compile @@@@ -# endif -# endif #endif #include @@ -204,8 +200,8 @@ post_msg(hdrptr, pbufcnt, pnet_addr, piiu) UNLOCKEVENTS; } LOCK; - ellDelete(&pend_read_list, (ELLNODE *)monix); - ellAdd(&free_event_list, (ELLNODE *)monix); + dllDelete(&pend_read_list, monix); + dllAdd(&free_event_list, monix); UNLOCK; piiu->outstanding_ack_count--; @@ -229,8 +225,8 @@ post_msg(hdrptr, pbufcnt, pnet_addr, piiu) */ if (!t_postsize) { LOCK; - ellDelete(&monix->chan->eventq, (ELLNODE *)monix); - ellAdd(&free_event_list, (ELLNODE *)monix); + dllDelete(&monix->chan->eventq, monix); + dllAdd(&free_event_list, monix); UNLOCK; piiu->outstanding_ack_count--; @@ -442,8 +438,8 @@ post_msg(hdrptr, pbufcnt, pnet_addr, piiu) struct ioc_in_use *piiu = &iiu[chix->iocix]; LOCK; - ellDelete(&piiu->chidlist, (ELLNODE *)chix); - ellAdd(&iiu[BROADCAST_IIU].chidlist, (ELLNODE *)chix); + dllDelete(&piiu->chidlist, chix); + dllAdd(&iiu[BROADCAST_IIU].chidlist, chix); chix->iocix = BROADCAST_IIU; if (!piiu->chidlist.count) close_ioc(piiu); @@ -475,11 +471,11 @@ post_msg(hdrptr, pbufcnt, pnet_addr, piiu) monix; monix = (evid) monix->node.next) if (monix->chan == chix) { - ellDelete(&pend_read_list, (ELLNODE *)monix); - ellAdd(&free_event_list, (ELLNODE *)monix); + dllDelete(&pend_read_list, monix); + dllAdd(&free_event_list, monix); } - ellConcat(&free_event_list, &chix->eventq); - ellDelete(&piiu->chidlist, (ELLNODE *)chix); + dllConcat(&free_event_list, &chix->eventq); + dllDelete(&piiu->chidlist, chix); free(chix); piiu->outstanding_ack_count--; if (!piiu->chidlist.count) @@ -629,9 +625,9 @@ struct in_addr *pnet_addr; if(chan->iocix != BROADCAST_IIU) ca_signal(ECA_NEWADDR, (char *)(chan+1)); chpiiu = &iiu[chan->iocix]; - ellDelete(&chpiiu->chidlist, (ELLNODE *)chan); + dllDelete(&chpiiu->chidlist, chan); chan->iocix = newiocix; - ellAdd(&iiu[newiocix].chidlist, (ELLNODE *)chan); + dllAdd(&iiu[newiocix].chidlist, chan); } /* @@ -712,7 +708,7 @@ int lock; LOCK; } - while(pioe = (struct pending_io_event *) ellGet(&ioeventlist)){ + while(pioe = (struct pending_io_event *) dllGet(&ioeventlist)){ (*pioe->io_done_sub)(pioe->io_done_arg); free(pioe); } @@ -744,9 +740,9 @@ client_channel_exists(chan) for (piiu = iiu; piiu < pnext_iiu; piiu++) { /* - * ellFind returns the node number or ERROR + * dllFind returns the node number or ERROR */ - status = ellFind(&piiu->chidlist, (ELLNODE *)chan); + status = dllFind(&piiu->chidlist, chan); if (status != ERROR) { return TRUE; }