> + this->iiuExistenceCount = this->circuitList.count();
Examining this change a bit closer I see that it will introduce a race condition when circuits are being created and destroyed at close to the same instant in time. See revision 11786 of cac.cpp which fixes mantis 334 if you are interested in what this code does. After running the regression tests, I pushed in a fix (which is removing above mentioned change and restoring the increment of iiuExistenceCount in cac::findOrCreateVirtCircuit.
Jeff
______________________________________________________
Jeffrey O. Hill Email [email protected]
LANL MS H820 Voice 505 665 1831
Los Alamos NM 87545 USA FAX 505 665 5107
Message content: TSPA
> -----Original Message-----
> From: Ralph Lange [mailto:[email protected]]
> Sent: Monday, August 16, 2010 10:03 AM
> To: Andrew Johnson
> Cc: Jeff Hill; EPICS Core Talk
> Subject: Fixed: Segfaults in 3.14 branch since merging ca-over-tcp
>
> Hi Andrew,
>
> it looks as I have found the reason for the segfaults, which I think is
> a bug in CAC.
>
> In the cac::~cac() destructor, a private member
> "this->iiuExistenceCount" is used to determine if cac should wait for
> TCP threads to shutdown. While this counter gets correctly decreased in
> cac::destroyIIU(), it never gets increased or set (except initialized to
> 0 in the cpp constructor).
>
> So cac::~cac() was never waiting for the TCP threads to shutdown, and
> happily kept tearing down the timer/mutex infrastructure. If the threads
> were not fast enough, they were hitting on destroyed semaphores when
> cancelling their watchdog timers - that was causing the exceptions and
> segfaults.
>
> This one-line fix will take care of the problem:
>
>
> === modified file 'src/ca/cac.cpp'
> --- src/ca/cac.cpp 2010-04-15 21:06:16 +0000
> +++ src/ca/cac.cpp 2010-08-16 15:24:13 +0000
> @@ -287,6 +287,7 @@
> //
> // shutdown all tcp circuits
> //
> + this->iiuExistenceCount = this->circuitList.count();
> tsDLIter < tcpiiu > iter = this->circuitList.firstIter ();
> while ( iter.valid() ) {
> // this causes a clean shutdown to occur
>
>
> Maybe it actually takes care of several shutdown related issues...
>
> Yay!
> Ralph
- Replies:
- Re: Fixed: Segfaults in 3.14 branch since merging ca-over-tcp Ralph Lange
- References:
- Fixed: Segfaults in 3.14 branch since merging ca-over-tcp Ralph Lange
- Navigate by Date:
- Prev:
RE: Fixed: Segfaults in 3.14 branch since merging ca-over-tcp Jeff Hill
- Next:
Re: Fixed: Segfaults in 3.14 branch since merging ca-over-tcp Ralph Lange
- Index:
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: Fixed: Segfaults in 3.14 branch since merging ca-over-tcp Jeff Hill
- Next:
Re: Fixed: Segfaults in 3.14 branch since merging ca-over-tcp Ralph Lange
- Index:
2002
2003
2004
2005
2006
2007
2008
2009
<2010>
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
|