write error message on write timeout
This commit is contained in:
@ -662,15 +662,18 @@ writeHandler()
|
|||||||
size_t written = 0;
|
size_t written = 0;
|
||||||
|
|
||||||
pasynUser->timeout = 0;
|
pasynUser->timeout = 0;
|
||||||
if (pasynGpib)
|
if (!pasynGpib)
|
||||||
pasynOctet->flush(pvtOctet, pasynUser);
|
|
||||||
else
|
|
||||||
// discard any early input, but forward it to potential async records
|
// discard any early input, but forward it to potential async records
|
||||||
// thus do not use pasynOctet->flush()
|
// thus do not use pasynOctet->flush()
|
||||||
|
// unfortunately we cannot do this with GPIB because addressing a device as talker
|
||||||
|
// when it has nothing to say is an error. Also timeout=0 does not help here (would need
|
||||||
|
// a change in asynGPIB), thus use flush() for GPIB.
|
||||||
do {
|
do {
|
||||||
char buffer [256];
|
char buffer [256];
|
||||||
size_t received = 0;
|
size_t received = 0;
|
||||||
int eomReason = 0;
|
int eomReason = 0;
|
||||||
|
debug("AsynDriverInterface::writeHandler(%s): reading old input\n",
|
||||||
|
clientName());
|
||||||
status = pasynOctet->read(pvtOctet, pasynUser,
|
status = pasynOctet->read(pvtOctet, pasynUser,
|
||||||
buffer, sizeof(buffer), &received, &eomReason);
|
buffer, sizeof(buffer), &received, &eomReason);
|
||||||
if (received == 0) break;
|
if (received == 0) break;
|
||||||
@ -679,6 +682,12 @@ writeHandler()
|
|||||||
clientName(), (long)received, StreamBuffer(buffer, received).expand()());
|
clientName(), (long)received, StreamBuffer(buffer, received).expand()());
|
||||||
#endif
|
#endif
|
||||||
} while (status == asynSuccess);
|
} while (status == asynSuccess);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
debug("AsynDriverInterface::writeHandler(%s): flushing old input\n",
|
||||||
|
clientName());
|
||||||
|
pasynOctet->flush(pvtOctet, pasynUser);
|
||||||
|
}
|
||||||
|
|
||||||
// discard any early events
|
// discard any early events
|
||||||
receivedEvent = 0;
|
receivedEvent = 0;
|
||||||
@ -713,6 +722,12 @@ writeHandler()
|
|||||||
clientName(), (long)outputSize, (long)written,
|
clientName(), (long)outputSize, (long)written,
|
||||||
pasynUser->timeout, asynStatusStr[status]);
|
pasynUser->timeout, asynStatusStr[status]);
|
||||||
|
|
||||||
|
if (oldeoslen >= 0) // restore asyn terminator
|
||||||
|
{
|
||||||
|
pasynOctet->setOutputEos(pvtOctet, pasynUser,
|
||||||
|
oldeos, oldeoslen);
|
||||||
|
}
|
||||||
|
|
||||||
// Up to asyn 4.17 I can't see when the server has disconnected. Why?
|
// Up to asyn 4.17 I can't see when the server has disconnected. Why?
|
||||||
int connected;
|
int connected;
|
||||||
pasynManager->isConnected(pasynUser, &connected);
|
pasynManager->isConnected(pasynUser, &connected);
|
||||||
@ -726,11 +741,6 @@ writeHandler()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (oldeoslen >= 0) // restore asyn terminator
|
|
||||||
{
|
|
||||||
pasynOctet->setOutputEos(pvtOctet, pasynUser,
|
|
||||||
oldeos, oldeoslen);
|
|
||||||
}
|
|
||||||
switch (status)
|
switch (status)
|
||||||
{
|
{
|
||||||
case asynSuccess:
|
case asynSuccess:
|
||||||
@ -755,6 +765,8 @@ writeHandler()
|
|||||||
writeCallback(StreamIoSuccess);
|
writeCallback(StreamIoSuccess);
|
||||||
return;
|
return;
|
||||||
case asynTimeout:
|
case asynTimeout:
|
||||||
|
error("%s: timeout (%g sec) in write: %s\n",
|
||||||
|
clientName(), pasynUser->timeout, pasynUser->errorMessage);
|
||||||
writeCallback(StreamIoTimeout);
|
writeCallback(StreamIoTimeout);
|
||||||
return;
|
return;
|
||||||
case asynOverflow:
|
case asynOverflow:
|
||||||
|
Reference in New Issue
Block a user