Argonne National Laboratory

Experimental Physics and
Industrial Control System

1994  1995  1996  1997  1998  <19992000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  Index 1994  1995  1996  1997  1998  <19992000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019 
<== Date ==> <== Thread ==>

Subject: One CA server question and one CA server problem
From: saa@SLAC.Stanford.EDU
To: tech-talk@aps.anl.gov
Date: Wed, 01 Sep 1999 11:47:55 -0700 (PDT)
To people running portable CA servers:

Question:  I've recently added diagnostics to my CA server to keep track
           of the last 10 PVs broadcast to me that don't exist on my server.
           I also keep a counter of the number of times non-existent PVs 
	   are requested and the time of the last request.  I see I'm being 
           bombarded constantly with many PVs that belong on a totally 
           different control system (BaBar - and a different subnet).  So 
           there is a leak somewhere (probably the gateway).  Besides shutting
           down each client until the problem goes away, are there other
           less invasive techniques for finding "noisy" clients?  The server
           runs on a VMS system with Multinet (there may be some Multinet
           tool...).

Problem:   My server was freezing about once a week.  I tracked the problem
           down to a rare bad status return from the select call in the process
           function in the fdManager.cc file.  I have changed it so that 
           all fd sets are zeroed and return is done if there is ANY bad status 
           from select.  I have not seen the freeze since correcting this
           problem though I'll continue monitoring.  Here is a snippet with 
           the change for anyone interested:

	if (ioPending) {
		status = select (this->maxFD, &this->fdSets[fdrRead], 
			&this->fdSets[fdrWrite], &this->fdSets[fdrExcp], &tv);
	}
	else {
		status = 0;
	}

	if (waitPending) staticTimerQueue.process();

	if (status<=0) {
		for (size_t i=0u; 
		     i<sizeof(this->fdSets)/sizeof(this->fdSets[0u]); i++) {
			FD_ZERO(&this->fdSets[i]);
		}
		if ((status < 0) && (SOCKERRNO != SOCK_EINTR)) {
			fprintf(stderr, 
			"fdManager: select failed because errno=%d=\"%s\"\n",
				SOCKERRNO, SOCKERRSTR);
		}
		this->processInProg = 0;
		return;
	}

Thanks for your help!  Sorry I'm missing you all at ICALEPCS.

Stephanie Allison


Replies:
Re: One CA server problem Ralph Lange
Re: One CA server question Ralph Lange
RE: One CA server question and one CA server problem Jeff Hill

Navigate by Date:
Prev: workQPanic! Oh no! Mark M. Ito
Next: Re: workQPanic! Oh no! Tim Mooney
Index: 1994  1995  1996  1997  1998  <19992000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019 
Navigate by Thread:
Prev: Re: workQPanic! Oh no! Tim Mooney
Next: Re: One CA server problem Ralph Lange
Index: 1994  1995  1996  1997  1998  <19992000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019 
ANJ, 10 Aug 2010 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·