If multiple clients must wait because of a connect or disconnect only the first one gets notified. The fix is:
diff -r1.42 asynManager.c 391,392c391,392 < pexceptionUser = (exceptionUser *)ellFirst(&pdpCommon->exceptionNotifyList); < while(pexceptionUser) { --- > while((pexceptionUser = > (exceptionUser *)ellFirst(&pdpCommon->exceptionNotifyList))) { mercury% pwd /home/phoebus/MRK/epics/modules/soft/asyn/asyn/asynDriver
The following patch must be applied to allow local serial ports to work on POSIX (Solaris, Linux, WIN32-cygwin) machines:
diff -u -r1.10 -r1.11 --- asyn/drvAsynSerial/drvAsynSerialPort.c 15 Apr 2004 21:17:03 -0000 1.10 +++ asyn/drvAsynSerial/drvAsynSerialPort.c 10 May 2004 18:30:57 -0000 1.11 @@ -11,7 +11,7 @@ ***********************************************************************/ /* - * $Id: drvAsynSerialPort.c,v 1.10 2004/04/15 21:17:03 norume Exp $ + * $Id: drvAsynSerialPort.c,v 1.11 2004/05/10 18:30:57 norume Exp $ */ #include@@ -170,7 +170,6 @@ asynUser *pasynUser = tty->pasynUser; #if defined(USE_TERMIOS) - struct termios termios; int baudCode; switch (tty->baud) { case 50: baudCode = B50; break; @@ -201,10 +200,10 @@ tty->termios.c_lflag = 0; tty->termios.c_cc[VMIN] = 0; tty->termios.c_cc[VTIME] = 0; - cfsetispeed(&termios,baudCode); - cfsetospeed(&termios,baudCode); + cfsetispeed(&tty->termios,baudCode); + cfsetospeed(&tty->termios,baudCode); tty->readPollmsec = -1; - if (tcsetattr(tty->fd, TCSADRAIN, &termios) < 0) { + if (tcsetattr(tty->fd, TCSADRAIN, &tty->termios) < 0) { epicsSnprintf(pasynUser->errorMessage,pasynUser->errorMessageSize, "Can't set \"%s\" attributes: %s", tty->serialDeviceName, strerror(errno));
When building with EPICS Base R3.14.6 or greater, comment out the epicsInterruptibleSyscall.h and epicsInterruptibleSyscall.c lines in asyn/Makefile:
@@ -19,10 +19,10 @@ SRC_DIRS += $(ASYN)/asynDriver INC += asynDriver.h INC += epicsInterruptibleSyscall.h -INC += epicsString1.h +#INC += epicsString1.h asyn_SRCS += asynManager.c asyn_SRCS += epicsInterruptibleSyscall.c -asyn_SRCS += epicsString1.c +#asyn_SRCS += epicsString1.c SRC_DIRS += $(ASYN)/asynGpib INC += asynGpibDriver.h
The RPC library on Mac OSD 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.
If a user callback calls a low level driver with an infinite or very long timeout, there is no way to make the call terminate. Is there a generic way to abort the call?
Does not support GPIB specific functions.
This needs to be implemented for asynDriver.
Think about creating generic support for connecting to EPICS records.
Consider generic support for various network protocals: Modbus, etherIP, etc.