From cdaf71ab578b04cc46a90cf79155a1ece4af7e8e Mon Sep 17 00:00:00 2001
From: "benjamin.franksen" <benjamin.franksen@helmholtz-berlin.de>
Date: Thu, 26 Sep 2013 22:23:10 +0000
Subject: [PATCH] seq: fixed a bug in pvXxxCancel and pvXxxComplete

I forgot to add the array index to the varId when iterating
over a multi-PV array.
---
 src/seq/seq_if.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/src/seq/seq_if.c b/src/seq/seq_if.c
index cf6f3444..8bb0a6cd 100644
--- a/src/seq/seq_if.c
+++ b/src/seq/seq_if.c
@@ -249,7 +249,7 @@ epicsShareFunc boolean seq_pvGetComplete(
 					ch->varName);
 			done = TRUE;
 		}
-		else if (!ss->getReq[varId])
+		else if (!ss->getReq[varId+n])
 		{
 			errlogSevPrintf(errlogMinor,
 				"pvGetComplete(%s): no pending get request for this variable\n",
@@ -261,7 +261,7 @@ epicsShareFunc boolean seq_pvGetComplete(
 			switch (epicsEventTryWait(getSem))
 			{
 			case epicsEventWaitOK:
-				ss->getReq[varId] = NULL;
+				ss->getReq[varId+n] = NULL;
 				epicsEventSignal(getSem);
 				status = check_connected(ch->dbch, metaPtr(ch,ss));
 				if (status == pvStatOK && optTest(sp, OPT_SAFE))
@@ -276,7 +276,7 @@ epicsShareFunc boolean seq_pvGetComplete(
 			case epicsEventWaitTimeout:
 				break;
 			case epicsEventWaitError:
-				ss->getReq[varId] = NULL;
+				ss->getReq[varId+n] = NULL;
 				epicsEventSignal(getSem);
 				errlogSevPrintf(errlogFatal, "pvGetComplete(%s): "
 					"epicsEventTryWait(getSem[%d]) failure\n", ch->varName, varId);
@@ -328,7 +328,7 @@ epicsShareFunc void seq_pvGetCancel(
 		}
 		else
 		{
-			ss->getReq[varId] = NULL;
+			ss->getReq[varId+n] = NULL;
 			epicsEventSignal(getSem);
 		}
 	}
@@ -613,7 +613,7 @@ epicsShareFunc boolean seq_pvPutComplete(
 					ch->varName);
 			done = TRUE;
 		}
-		else if (!ss->putReq[varId])
+		else if (!ss->putReq[varId+n])
 		{
 		        errlogSevPrintf(errlogMinor,
 			        "pvPutComplete(%s): no pending put request for this variable\n",
@@ -625,7 +625,7 @@ epicsShareFunc boolean seq_pvPutComplete(
 			switch (epicsEventTryWait(putSem))
 			{
 			case epicsEventWaitOK:
-				ss->putReq[varId] = NULL;
+				ss->putReq[varId+n] = NULL;
 				epicsEventSignal(putSem);
 				check_connected(ch->dbch, metaPtr(ch,ss));
 				done = TRUE;
@@ -633,7 +633,7 @@ epicsShareFunc boolean seq_pvPutComplete(
 			case epicsEventWaitTimeout:
 				break;
 			case epicsEventWaitError:
-				ss->putReq[varId] = NULL;
+				ss->putReq[varId+n] = NULL;
 				epicsEventSignal(putSem);
 				errlogSevPrintf(errlogFatal, "pvPutComplete(%s): "
 				  "epicsEventTryWait(putSem[%d]) failure\n", ch->varName, varId);
@@ -685,7 +685,7 @@ epicsShareFunc void seq_pvPutCancel(
 		}
 		else
 		{
-			ss->putReq[varId] = NULL;
+			ss->putReq[varId+n] = NULL;
 			epicsEventSignal(putSem);
 		}
 	}
-- 
GitLab