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 Andrew Johnson
- RE: Fixed: Segfaults in 3.14 branch since merging ca-over-tcp Jeff Hill
- RE: Fixed: Segfaults in 3.14 branch since merging ca-over-tcp Jeff Hill
- Navigate by Date:
- Prev:
RE: some issues with "lp:epics-base" in bazaar Jeff Hill
- Next:
Re: Fixed: Segfaults in 3.14 branch since merging ca-over-tcp Andrew Johnson
- 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: build error on R3.14 trunk Andrew Johnson
- Next:
Re: Fixed: Segfaults in 3.14 branch since merging ca-over-tcp Andrew Johnson
- Index:
2002
2003
2004
2005
2006
2007
2008
2009
<2010>
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
|