EPICS Controls 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  2020  2021  2022  2023  2024  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  2020  2021  2022  2023  2024 
<== Date ==> <== Thread ==>

Subject: One CA server question and one CA server problem
From: [email protected]
To: [email protected]
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  2020  2021  2022  2023  2024 
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  2020  2021  2022  2023  2024 
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 ·