I would recommend changing it to:
} while (status == asynSuccess);
That way it is robust against other types of errors being returned.
Mark
-----Original Message-----
From: [email protected] [mailto:[email protected]] On Behalf Of [email protected]
Sent: Wednesday, November 25, 2015 1:08 PM
To: [email protected]; [email protected]
Subject: Stream Device: infinite loop when remote closes connection
Hello all, Dirk,
I've found a bug in StreamDevice asynDriver code. In my case, whenever the remote TCP host closes connection, a thread in EPICS will enter an infinite loop, the connection failure will never be reported, and reconnection will never be attempted. I've tracked it down to this code in AsynDriverInterface.cc:
// now, we can write (called by asynManager)
void AsynDriverInterface::
writeHandler()
{
...
} while (status != asynTimeout);
...
I observed that the read returns asynError and this loop continues forever. I was able to fix it by changing this line to:
} while (status != asynTimeout && status != asynError);
Now it appears to be working correctly, the connection error is reported and reconnection works.
Best regards,
Ambroz Bizjak
- References:
- Stream Device: infinite loop when remote closes connection ambroz . bizjak
- Navigate by Date:
- Prev:
Stream Device: infinite loop when remote closes connection ambroz . bizjak
- Next:
How to study the epics system in no device? mujin park
- Index:
1994
1995
1996
1997
1998
1999
2000
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:
Stream Device: infinite loop when remote closes connection ambroz . bizjak
- Next:
RE: Stream Device: infinite loop when remote closes connection Mazanec Tomáš
- Index:
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
<2015>
2016
2017
2018
2019
2020
2021
2022
2023
2024
|