asynDriver: Asynchronous Driver Support - Known Problems

June 13, 2006

Release 4-6

devEpics

There is a null pointer dereference problem for all device support when SCAN=I/O Intr and asyn port could not be found.

asynRecord

There is buffer overflow problem if NRRD is set to more than 40 in ASCII input
mode.

drvAsynSerialPort

Does not yet support new timeout semantics (timeout<0 means wait forever, timeout=0 means return characters immediately available). Support for timeout values less than zero will be part of the next release.

drvAsynIPPort

If a client calls asynCommon->connect when the asyn port is already connected
to the IP port, then the asyn port will be disconnected from the IP port for all clients.
The correct behavior in this case is to simply return an asynError status.

The following change fix can be made to drvAsynIPPort.c to fix the problem:

Release 4-3

gsIP488

devAsynOctet

Release 4-2

devAsynFloat64

Device support is not returning 2 (do not convert) for ai records when it
should. This means that the VAL field is being set back to 0 by the record
after device support writes to it.

asynRecord

The record sometimes does not read the current input and output EOS values
from the driver when it connects.

Release 4-1

asynInterposeEos

If read reads maxchars, it forces the last character to be 0 and returns
asynOverflow if it wasn't.

drvAsynSerialPort,drvAsynIPPort - Error reporting

These do not properly set an error message in asynUser.errorMessage when
they return asynError.

asynRecordFCTL

This calls setOption for clocal. This only works on vxWorks because
vxWorks uses the name CLOCAL for what POSIX calls CRTSCTS.

devEpics

If a call to a low level driver, which registered itself as canBlock,
completes without blocking then the asynchronous completion may never occur.
This will be fixed in the next release.

drvAsynIPPort and drvAsynSerialPort

The problem reported for version 4 about segmentation faults on cygwin-x86
has been fixed.

Release 4-0

asynRecord

asynRecord (and other code) use epicsStrSnPrintEscaped. In EPICS 3.14.6
the files epicsVsnprintf on vxWorks (which gets called by several other
epicsXXXprintf routines) and epicsStrSnPrintEscaped each have a bug could
cause buffer overflow. These bugs are guaranteed to lead to corruption in
asynRecord if the received string is longer than 40 characters.

drvAsynSerial

drvAsynSerialPort.c has a bug that can cause segmentation faults on
some systems (e.g. cygwin-x86). The line

static const struct asynOctet drvAsynSerialPortAsynOctet = {

must be changed to

static struct asynOctet drvAsynSerialPortAsynOctet = {

i.e. remove the const keyword.

drvAsynIPPort.c has a bug that can cause segmentation faults on some
systems (e.g. cygwin-x86). The line

static const struct asynOctet drvAsynIPPortAsynOctet = {

must be changed to

static struct asynOctet drvAsynIPPortAsynOctet = {

i.e. remove the const keyword.

asynManager

removeInterruptUser - has not been tested

addInterruptUser/removeInterruptUser are not allowed to be called from
interrupt callbacks. This restriction should be removed.

vxi11

E5810 reboot -

John Sinclair (ONRL) reported that the IOC crashed if an E5810 was
power cycled. This could not be reproduced at APS. We will have to see if
it is still a problem.

E5810 serial port -

Attempts to provide support for the serial port of a E5810 have not
been successful

Release 3-3

vxi11Configure

If vxiName is specified as "inst" then the driver incorrectly says
that it does not block.

asynRecord

If asynRecord is attached to a port that does not implement asynOctet,
then asynRecord crashes of it attempt to send/receive a message.

asynManager

a queueRequest timeout hangs if the timeout is canceled while the
timout callback is active.

cancelRequest also has possible race conditions

The next release gaurantees that when queueRequest is called:

Exactly one of the following occurs:

queue callback is called

timeout callback is called

cancelRequest removes the request before either queue callback or
timeout callback is called.

If either the queue or timeout callback is active when cancelRequest is
called, it will not return until the callback completes.

Release 3-2

Mac OS X (Darwin)

The RPC library on Mac OS X 10.3.3 does not handle device timeouts
properly and may cause core dumps. A bug report has been filed with Apple. A
workaround is to use the GNU glibc RPC/XDR routines.

vxWorks

Attempting to change the trace file to "stdout" does not work becuase
vxWorks has per-task standard output streams.

Release 3-1

EPICS Base R3.14.6

When building with EPICS Base R3.14.6 or greater, comment out the
epicsInterruptibleSyscall.h and epicsInterruptibleSyscall.c lines in
asyn/Makefile: