2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 <2019> 2020 2021 2022 2023 2024 | Index | 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: | Re: a race condition between rsrv_init() and casStatsFetch() |
From: | Michael Davidsaver via Core-talk <[email protected]> |
To: | "Kim, Kukhee" <[email protected]> |
Cc: | EPICS Core-Talk <[email protected]> |
Date: | Wed, 18 Sep 2019 17:52:22 -0700 |
Hi Everyone,
Some of our colleagues in SLAC found a race condition between rsrv_init() and casStatsFetch() during starting iocs. iocAdmin calls casStatsFetch() periodically to get CA statistics. The casStatsFetch relies on a global mutex clientQlock which is created by rsrv_init().
We found that the casStatsFetch is called before the rsrv_init is completed during iocs start, sometimes.
We would like to add the following code into veery first part of casStatsFetch function as a protection to avoid trouble.
if(!clientQlock) {return;}
One of function in caservertask.c, casr() has the protection as above, but the casStatsFetch does not have it.
I think epics 3.15, 3.16, and epics 7 all of them have the same potential issue.
Thank you for your concern.Best regards,KukheeKukhee Kim
TID AIR Advanced Control System
SLAC National Accelerator Laboratory
2575 Sand Hill Rd, MS 94
Menlo Park, CA 94025
Email: [email protected]
Phone: (650)926-4912
Fax: (650)926-2923