A bug exists in dbEvent.c that can cause an IOC to go into an infinite loop. This can happen if a client has many undelivered monitors and cancels events. A patch is now available which fixes this problem in both R3.13.6 and R3.13.7.
To make the necessary source code changes, download the patch file from here (shift+click on that link in most browsers) and and copy it to the <base>/src/db directory. Then use the patch program to apply the change as follows:
zeus% patch < dbEvent.patch Looks like a unified context diff. done
Finally run gnumake at the top of the base tree.
In release 3.13.5 changes were made to allow ESLO EOFF to be database design fields. Because of changes that were made to aiRecord and aoRecord device support that does not implement special_linconv may no longer work.
To fix aiRecord.c, in init_record replace
if ((pai->linr == menuConvertLINEAR) && pdset->special_linconv) {
by
if ((pai->eslo==1.0) && (pai->eoff==0.0)) {
To fix aoRecord.c, in init_record replace
if ((pao->linr == menuConvertLINEAR) && pdset->special_linconv) {
by
if ((pao->eslo==1.0) && (pao->eoff==0.0)) {
devAiCamac is the only device support supplied with base that is broken.
If a CA client issues a put to a disabled record then, when the record is enabled, database puts to the record will not make the record process until a CA put is again issued. The fix is:
diff -c -r1.89.4.6 dbAccess.c *** dbAccess.c 2002/04/08 14:40:59 1.89.4.6 --- dbAccess.c 2002/05/02 20:09:15 *************** *** 607,612 **** --- 607,613 ---- if(*ptrace) printf("disabled: %s\n",precord->name); /*take care of caching and notifyCompletion*/ precord->rpro = FALSE; + precord->putf = FALSE; if (precord->ppn) dbNotifyCompletion(precord); /* raise disable alarm */ if (precord->stat==DISABLE_ALARM) goto all_done;
The database breakpoint facility is not working. This has probably been
true for several releases. To fix it make the following change to
diff -r1.9 dbBkpt.c 321c321,322 < bkpt_stack_sem = semBCreate(SEM_Q_FIFO, SEM_FULL); --- > bkpt_stack_sem = semMCreate( > SEM_DELETE_SAFE|SEM_INVERSION_SAFE|SEM_Q_PRIORITY);
If dbProcess is called recursively by different tasks, it does not properly handle TPRO. Consider the following database:
record(ao,"mrkao") { field(OUT,"mrkai CA") field(TPRO,"1") } record(ai,"mrkai") { field(TPRO,"1") }
If a channel access put is sent to mrkao, no message is issued when mrkai is processed.
This will be fixed in the next release
If in your st.cmd file you issue the command.
TSconfigure(0,0,0,0,0,0,1)
And set the TSE field of any record to a non zero value, then a crash will occur when recGblGetTimeStamp is called.
To fix this make the following change to
diff -r1.28.2.5 drvTS.c 629a630 > TSuserGet = TSuserGetJunk;
It was incorrectly using sevr instead of nsev. To fix this make the change
diff -r1.7.4.4 calcoutRecord.c 605c605 < if (pcalc->sevr < INVALID_ALARM ) { --- > if (pcalc->nsev < INVALID_ALARM ) {
diff -r1.31.6.1 calcPerform.c 104a105,106 > #include <private/mathP.h> /* For isNan*/> #define isnan isNan 517c519 < return(0); --- > return((isnan(*presult) ? -1 : 0));