replace osiClock calls with tsStamp calls

This commit is contained in:
Marty Kraimer
2000-01-07 13:36:51 +00:00
parent a0bba4fa7f
commit 306913b991
7 changed files with 50 additions and 70 deletions
+2 -2
View File
@@ -62,7 +62,7 @@ static char *sccsId = "%W% %G%";
#include "osiSock.h"
#include "osiThread.h"
#include "osiClock.h"
#include "tsStamp.h"
#include "errlog.h"
#include "db_access.h"
#include "special.h"
@@ -923,7 +923,7 @@ unsigned cid
return NULL;
}
ellInit(&pchannel->eventq);
pchannel->ticks_at_creation = clockGetRate();
tsStampGetCurrent(&pchannel->time_at_creation);
pchannel->addr = *pAddr;
pchannel->client = client;
/*
+2 -2
View File
@@ -53,7 +53,7 @@ static char *sccsId = "@(#) $Id$";
#include <errno.h>
#include "osiSock.h"
#include "osiClock.h"
#include "tsStamp.h"
#include "os_depen.h"
#include "osiThread.h"
#include "errlog.h"
@@ -246,7 +246,7 @@ SOCKET sock;
break;
}
client->ticks_at_last_recv = clockGetRate();
tsStampGetCurrent(&client->time_at_last_recv);
client->recv.cnt += (unsigned long) nchars;
status = camessage(client, &client->recv);
+2 -3
View File
@@ -46,7 +46,7 @@ static char *sccsId = "@(#) $Id$";
#include <sys/types.h>
#include "osiSock.h"
#include "osiClock.h"
#include "tsStamp.h"
#include "ellLib.h"
#include "errlog.h"
#include "server.h"
@@ -172,8 +172,7 @@ int lock_needed;
}
pclient->send.stk = 0;
pclient->ticks_at_last_send = clockGetRate();
tsStampGetCurrent(&pclient->time_at_last_send);
}
+10 -31
View File
@@ -58,7 +58,7 @@ static char *sccsId = "@(#) $Id$";
#include <errno.h>
#include "osiSock.h"
#include "osiClock.h"
#include "tsStamp.h"
#include "errlog.h"
#include "ellLib.h"
#include "taskwd.h"
@@ -72,7 +72,6 @@ static char *sccsId = "@(#) $Id$";
LOCAL int terminate_one_client(struct client *client);
LOCAL void log_one_client(struct client *client, unsigned level);
LOCAL unsigned long delay_in_ticks(unsigned long prev);
/*
@@ -391,11 +390,12 @@ LOCAL void log_one_client(struct client *client, unsigned level)
int i;
struct channel_in_use *pciu;
char *pproto;
float send_delay;
float recv_delay;
double send_delay;
double recv_delay;
unsigned long bytes_reserved;
char *state[] = {"up", "down"};
char clientHostName[256];
TS_STAMP current;
char clientHostName[256];
ipAddrToA (&client->addr, clientHostName, sizeof(clientHostName));
@@ -409,8 +409,10 @@ LOCAL void log_one_client(struct client *client, unsigned level)
pproto = "UKN";
}
send_delay = delay_in_ticks(client->ticks_at_last_send);
recv_delay = delay_in_ticks(client->ticks_at_last_recv);
tsStampGetCurrent(&current);
send_delay = tsStampDiffInSeconds(&current,&client->time_at_last_send);
recv_delay = tsStampDiffInSeconds(&current,&client->time_at_last_recv);
printf(
"%s(%s): User=\"%s\", V%d.%u, Channel Count=%d\n",
@@ -427,8 +429,7 @@ LOCAL void log_one_client(struct client *client, unsigned level)
client->sock);
printf(
"\tSecs since last send %6.2f, Secs since last receive %6.2f\n",
send_delay/clockGetRate(),
recv_delay/clockGetRate());
send_delay, recv_delay);
printf(
"\tUnprocessed request bytes=%lu, Undelivered response bytes=%lu, State=%s\n",
client->send.stk,
@@ -488,25 +489,3 @@ LOCAL void log_one_client(struct client *client, unsigned level)
semBinaryShow (client->blockSem);
}
}
/*
* delay_in_ticks()
*/
unsigned long delay_in_ticks(unsigned long prev)
{
unsigned long delay;
unsigned long current;
current = clockGetCurrentTick();
if (current >= prev) {
delay = current - prev;
}
else {
delay = 1 + current + (ULONG_MAX - prev);
}
return delay;
}
+15 -20
View File
@@ -67,7 +67,7 @@ static char *sccsId = "@(#) $Id$";
#include <errno.h>
#include "osiSock.h"
#include "osiClock.h"
#include "tsStamp.h"
#include "os_depen.h"
#include "osiThread.h"
#include "errlog.h"
@@ -200,7 +200,7 @@ int cast_server(void)
else {
prsrv_cast_client->recv.cnt = (unsigned long) status;
prsrv_cast_client->recv.stk = 0ul;
prsrv_cast_client->ticks_at_last_recv = clockGetRate();
tsStampGetCurrent(&prsrv_cast_client->time_at_last_recv);
/*
* If we are talking to a new client flush to the old one
@@ -283,20 +283,20 @@ int cast_server(void)
*
*
*/
#define TIMEOUT 60 /* sec */
#define TIMEOUT 60.0 /* sec */
LOCAL void clean_addrq()
{
struct channel_in_use *pciu;
struct channel_in_use *pnextciu;
unsigned long current;
unsigned long delay;
unsigned long maxdelay = 0;
TS_STAMP current;
double delay;
double maxdelay = 0;
unsigned ndelete=0;
unsigned long timeout = TIMEOUT*clockGetRate();
double timeout = TIMEOUT;
int s;
current = clockGetRate();
tsStampGetCurrent(&current);
semMutexMustTake(prsrv_cast_client->addrqLock);
pnextciu = (struct channel_in_use *)
@@ -305,13 +305,8 @@ LOCAL void clean_addrq()
while( (pciu = pnextciu) ) {
pnextciu = (struct channel_in_use *)pciu->node.next;
if (current >= pciu->ticks_at_creation) {
delay = current - pciu->ticks_at_creation;
}
else {
delay = current + (~0L - pciu->ticks_at_creation);
}
delay = tsStampDiffInSeconds(&pciu->time_at_creation,
&current);
if (delay > timeout) {
ellDelete(&prsrv_cast_client->addrq, &pciu->node);
@@ -325,15 +320,15 @@ LOCAL void clean_addrq()
UNLOCK_CLIENTQ;
freeListFree(rsrvChanFreeList, pciu);
ndelete++;
maxdelay = max(delay, maxdelay);
if(delay>maxdelay) maxdelay = delay;
}
}
semMutexGive(prsrv_cast_client->addrqLock);
# ifdef DEBUG
if(ndelete){
epicsPrintf ("CAS: %d CA channels have expired after %d sec\n",
ndelete, maxdelay / clockGetRate());
epicsPrintf ("CAS: %d CA channels have expired after %f sec\n",
ndelete, maxdelay);
}
# endif
@@ -404,8 +399,8 @@ struct client *create_udp_client(SOCKET sock)
client->recv.cnt = 0ul;
client->evuser = NULL;
client->disconnect = FALSE; /* for TCP only */
client->ticks_at_last_send = clockGetRate();
client->ticks_at_last_recv = clockGetRate();
tsStampGetCurrent(&client->time_at_last_send);
tsStampGetCurrent(&client->time_at_last_recv);
client->proto = IPPROTO_UDP;
client->sock = sock;
client->minor_version_number = CA_UKN_MINOR_VERSION;
+16 -9
View File
@@ -49,19 +49,25 @@ static char *sccsId = "@(#) $Id$";
*/
#include "osiSock.h"
#include "osiThread.h"
#include "osiClock.h"
#include "tsStamp.h"
#include "errlog.h"
#include "envDefs.h"
#include "server.h"
LOCAL powerOfTwo[10] = {
2.0,4.0,8.0,16.0,32.0,64.0,128.0,256.0,512.0,1024.0
};
/*
* RSRV_ONLINE_NOTIFY_TASK
*/
int rsrv_online_notify_task()
{
caAddrNode *pNode;
unsigned long delay;
unsigned long maxdelay;
double delay;
double maxdelay;
long longStatus;
double maxPeriod;
caHdr msg;
@@ -70,6 +76,7 @@ int rsrv_online_notify_task()
SOCKET sock;
int true = TRUE;
unsigned short port;
int indPowerofTwo = 0;
taskwdInsert(threadGetIdSelf(),NULL,NULL);
@@ -88,11 +95,10 @@ int rsrv_online_notify_task()
}
/*
* 1 tick initial delay between beacons, but max of 1/60 sec
* 1/50 second initial delay between beacons
*/
delay = 1ul;
if(clockGetRate() > 60.0) delay = clockGetRate()/60.0;
maxdelay = (unsigned long) maxPeriod*sysClkRateGet();
delay = .02;
maxdelay = maxPeriod;
/*
* Open the socket.
@@ -174,8 +180,9 @@ int rsrv_online_notify_task()
pNode = (caAddrNode *)pNode->node.next;
}
threadSleep(delay/(double)clockGetRate());
delay = min(delay << 1, maxdelay);
threadSleep(delay);
delay = delay + powerOfTwo[indPowerofTwo++];
if(delay>=maxdelay) delay = maxdelay;
}
}
+3 -3
View File
@@ -125,8 +125,8 @@ struct client{
ELLLIST putNotifyQue;
struct sockaddr_in addr;
unsigned long ticks_at_last_send;
unsigned long ticks_at_last_recv;
TS_STAMP time_at_last_send;
TS_STAMP time_at_last_recv;
void *evuser;
char *pUserName;
char *pHostName;
@@ -162,7 +162,7 @@ struct channel_in_use{
RSRVPUTNOTIFY *pPutNotify; /* potential active put notify */
const unsigned cid; /* client id */
const unsigned sid; /* server id */
unsigned long ticks_at_creation; /* for UDP timeout */
TS_STAMP time_at_creation; /* for UDP timeout */
struct dbAddr addr;
ASCLIENTPVT asClientPVT;
};