? asynRecord.patch Index: asynRecord.c =================================================================== RCS file: /net/phoebus/epicsmgr/cvsroot/epics/modules/soft/asyn/asyn/asynRecord/asynRecord.c,v retrieving revision 1.82 diff -u -r1.82 asynRecord.c --- asynRecord.c 28 May 2008 18:58:51 -0000 1.82 +++ asynRecord.c 7 Dec 2009 17:15:08 -0000 @@ -1476,18 +1476,16 @@ status = pasynRecPvt->pasynOctet->getOutputEos( pasynRecPvt->asynOctetPvt,pasynUser, saveEosBuf,sizeof saveEosBuf,&saveEosLen); - if (status != asynSuccess) { - reportError(pasynRec, status, "EOS TOO LONG"); - return; - } + /* getOutputEos can return an error if the driver does not implement it */ + if (status != asynSuccess) saveEosLen = 0; if (saveEosLen) pasynRecPvt->pasynOctet->setOutputEos(pasynRecPvt->asynOctetPvt, - pasynUser,NULL,0); + pasynUser,NULL,0); status = pasynRecPvt->pasynOctet->write(pasynRecPvt->asynOctetPvt, - pasynUser, outptr, nwrite, &nbytesTransfered); + pasynUser, outptr, nwrite, &nbytesTransfered); if (saveEosLen) pasynRecPvt->pasynOctet->setOutputEos(pasynRecPvt->asynOctetPvt, - pasynUser,saveEosBuf,saveEosLen); + pasynUser,saveEosBuf,saveEosLen); } else { /* ASCII or Hybrid mode */ status = pasynRecPvt->pasynOctet->write(pasynRecPvt->asynOctetPvt, @@ -1514,16 +1512,16 @@ status = pasynRecPvt->pasynOctet->getInputEos( pasynRecPvt->asynOctetPvt,pasynUser, saveEosBuf,sizeof saveEosBuf,&saveEosLen); - if (status != asynSuccess) { - reportError(pasynRec, status, "EOS TOO LONG"); - return; - } - pasynRecPvt->pasynOctet->setInputEos(pasynRecPvt->asynOctetPvt, - pasynUser,NULL,0); + /* getInputEos can return an error if the driver does not implement it */ + if (status != asynSuccess) saveEosLen = 0; + if (saveEosLen) + pasynRecPvt->pasynOctet->setInputEos(pasynRecPvt->asynOctetPvt, + pasynUser,NULL,0); status = pasynRecPvt->pasynOctet->read(pasynRecPvt->asynOctetPvt, pasynUser, inptr, nread, &nbytesTransfered,&eomReason); - pasynRecPvt->pasynOctet->setInputEos(pasynRecPvt->asynOctetPvt, - pasynUser,saveEosBuf,saveEosLen); + if (saveEosLen) + pasynRecPvt->pasynOctet->setInputEos(pasynRecPvt->asynOctetPvt, + pasynUser,saveEosBuf,saveEosLen); } else { /* ASCII or Hybrid mode */ status = pasynRecPvt->pasynOctet->read(pasynRecPvt->asynOctetPvt,