diff --git a/src/ioc/rsrv/camessage.c b/src/ioc/rsrv/camessage.c index 469c29b80..51ab8f3a0 100644 --- a/src/ioc/rsrv/camessage.c +++ b/src/ioc/rsrv/camessage.c @@ -1126,7 +1126,7 @@ static void casAccessRightsCB(ASCLIENTPVT ascpvt, asClientStatus type) pclient = pciu->client; assert(pclient); - if(pclient == prsrv_cast_client){ + if(pclient->proto==IPPROTO_UDP){ return; } @@ -1193,7 +1193,7 @@ static void access_rights_reply ( struct channel_in_use * pciu ) int v41; int status; - assert ( pciu->client != prsrv_cast_client ); + assert ( pciu->client->proto!=IPPROTO_UDP ); /* * noop if this is an old client @@ -1321,7 +1321,7 @@ static int claim_ciu_action ( caHdrLargeArray *mp, } } else { - epicsMutexMustLock(prsrv_cast_client->chanListLock); + epicsMutexMustLock(client->chanListLock); /* * clients which dont claim their * channel in use block prior to @@ -1331,7 +1331,7 @@ static int claim_ciu_action ( caHdrLargeArray *mp, if(!pciu){ errlogPrintf("CAS: client timeout disconnect id=%d\n", mp->m_cid); - epicsMutexUnlock(prsrv_cast_client->chanListLock); + epicsMutexUnlock(client->chanListLock); SEND_LOCK(client); send_err( mp, @@ -1342,24 +1342,6 @@ static int claim_ciu_action ( caHdrLargeArray *mp, return RSRV_ERROR; } - /* - * duplicate claim message are unacceptable - * (so we disconnect the client) - */ - if (pciu->client!=prsrv_cast_client) { - errlogPrintf("CAS: duplicate claim disconnect id=%d\n", - mp->m_cid); - epicsMutexUnlock(prsrv_cast_client->chanListLock); - SEND_LOCK(client); - send_err( - mp, - ECA_INTERNAL, - client, - "duplicate claim in old connect protocol"); - SEND_UNLOCK(client); - return RSRV_ERROR; - } - /* * remove channel in use block from * the UDP client where it could time @@ -1367,9 +1349,9 @@ static int claim_ciu_action ( caHdrLargeArray *mp, * who is claiming it */ ellDelete( - &prsrv_cast_client->chanList, + &client->chanList, &pciu->node); - epicsMutexUnlock(prsrv_cast_client->chanListLock); + epicsMutexUnlock(client->chanListLock); epicsMutexMustLock(client->chanListLock); pciu->state = rsrvCS_pendConnectResp; @@ -2623,7 +2605,7 @@ int camessage ( struct client *client ) if ( CASDEBUG > 2 ) log_header (NULL, client, &msg, pBody, nmsg); - if ( client == prsrv_cast_client ) { + if ( client->proto==IPPROTO_UDP ) { if ( msg.m_cmmd < NELEMENTS ( udpJumpTable ) ) { status = ( *udpJumpTable[msg.m_cmmd] )( &msg, pBody, client ); if (status!=RSRV_OK) { diff --git a/src/ioc/rsrv/caservertask.c b/src/ioc/rsrv/caservertask.c index 132fe462f..8b4ce4af4 100644 --- a/src/ioc/rsrv/caservertask.c +++ b/src/ioc/rsrv/caservertask.c @@ -300,7 +300,6 @@ int rsrv_init (void) freeListInitPvt ( &rsrvLargeBufFreeListTCP, rsrvSizeofLargeBufTCP, 1 ); ellInit ( &casIntfAddrList ); ellInit ( &beaconAddrList ); - prsrv_cast_client = NULL; pCaBucket = NULL; castcp_startStopEvent = epicsEventMustCreate(epicsEventEmpty); @@ -500,12 +499,12 @@ void casr (unsigned level) client = (struct client *) ellNext(&client->node); } UNLOCK_CLIENTQ - +/* if (level>=2 && prsrv_cast_client) { printf( "UDP Server:\n" ); log_one_client(prsrv_cast_client, level); } - +*/ if (level>=2u) { bytes_reserved = 0u; bytes_reserved += sizeof (struct client) * diff --git a/src/ioc/rsrv/cast_server.c b/src/ioc/rsrv/cast_server.c index 6089a078a..49d5e5078 100644 --- a/src/ioc/rsrv/cast_server.c +++ b/src/ioc/rsrv/cast_server.c @@ -54,7 +54,7 @@ /* * clean_addrq */ -static void clean_addrq(void) +static void clean_addrq(struct client *prsrv_cast_client) { struct channel_in_use * pciu; struct channel_in_use * pnextciu; @@ -124,6 +124,7 @@ void cast_server(void *pParm) osiSocklen_t recv_addr_size; osiSockIoctl_t nchars; SOCKET recv_sock; + struct client *prsrv_cast_client; recv_addr_size = sizeof(new_recv_addr); @@ -299,11 +300,11 @@ void cast_server(void *pParm) if (status<0) { errlogPrintf ("CA cast server: Unable to fetch N characters pending\n"); cas_send_dg_msg (prsrv_cast_client); - clean_addrq (); + clean_addrq (prsrv_cast_client); } else if (nchars == 0) { cas_send_dg_msg (prsrv_cast_client); - clean_addrq (); + clean_addrq (prsrv_cast_client); } } } diff --git a/src/ioc/rsrv/server.h b/src/ioc/rsrv/server.h index 21016fab8..7ed3f6ec8 100644 --- a/src/ioc/rsrv/server.h +++ b/src/ioc/rsrv/server.h @@ -170,7 +170,6 @@ GLBLTYPE ELLLIST clientQ; /* locked by clientQlock */ GLBLTYPE ELLLIST beaconAddrList; GLBLTYPE ELLLIST casIntfAddrList; GLBLTYPE epicsMutexId clientQlock; -GLBLTYPE struct client *prsrv_cast_client; GLBLTYPE BUCKET *pCaBucket; GLBLTYPE void *rsrvClientFreeList; GLBLTYPE void *rsrvChanFreeList;