From 05b412312ac2cef63cc407807737df71878fff2c Mon Sep 17 00:00:00 2001 From: Ron Sluiter Date: Thu, 20 Oct 2011 21:38:58 +0000 Subject: [PATCH] Use counter to prevent endless loop in send_mess() after VME58 reboot. --- motorApp/OmsSrc/drvOms58.cc | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/motorApp/OmsSrc/drvOms58.cc b/motorApp/OmsSrc/drvOms58.cc index 9ca9d43a..b9a2e91b 100644 --- a/motorApp/OmsSrc/drvOms58.cc +++ b/motorApp/OmsSrc/drvOms58.cc @@ -112,6 +112,8 @@ HeadURL: $URL$ * .40 01-26-11 rls - added reboot flag to DPRAM R/W reserved area. Driver * sets flag to 0x4321; set_status() disables board if flag * does not read 0x4321. + * .41 10-20-11 rls - Added counter in send_mess() to prevent endless loop + * after VME58 reboot. * */ @@ -657,6 +659,7 @@ static RTN_STATUS send_mess(int card, char const *com, char *name) epicsInt16 putIndex; char outbuf[MAX_MSG_SIZE], *p; RTN_STATUS return_code; + int count; if (strlen(com) > MAX_MSG_SIZE) { @@ -714,7 +717,7 @@ static RTN_STATUS send_mess(int card, char const *com, char *name) pmotor->outPutIndex = putIndex; /* Message Sent */ - while (putIndex != pmotor->outGetIndex) + for (count = 0; (putIndex != pmotor->outGetIndex) && (count < 1000); count++) { #ifdef DEBUG epicsInt16 deltaIndex, delta; @@ -725,6 +728,12 @@ static RTN_STATUS send_mess(int card, char const *com, char *name) #endif epicsThreadSleep(quantum); }; + + if (count >= 1000) + { + errlogPrintf("\n*** VME58 card #%d communication timeout ***\n", card); + return_code = ERROR; + } return(return_code); }