diff --git a/documentation/RELEASE_NOTES.html b/documentation/RELEASE_NOTES.html index 37224ed9f..a527844fb 100644 --- a/documentation/RELEASE_NOTES.html +++ b/documentation/RELEASE_NOTES.html @@ -13,51 +13,58 @@ +

Another race condition in errlog cleaned up

+ +

If it was still busy when the IOC was closed down, the errlog thread could +have preempted the exit handler and freed the various internal pvtData mutex and +event objects too soon.

+

Top-level make target changes

-

Several make targets have been changed. Note that these can only be used from an -application's <top> directory.

+

Several make targets have been changed. Note that these can only be used from +an application's <top> directory.

make uninstall.<arch>
-
Deletes the bin/<arch> and lib/<arch> directories for <arch> - only. Note that <arch> does not have to be an architecture that this host is - configured to build, it works for any arch.
+
Deletes the bin/<arch> and lib/<arch> directories for + <arch> only. Note that <arch> does not have to be an + architecture that this host is configured to build, it works for any + arch.
make archuninstall
Deletes the bin/<arch> and lib/<arch> directories for all - architectures that this host is configured to build. Should not affect files used - for multiple architectures, or for host or target architectures that this host is - not configured to build.
+ architectures that this host is configured to build. Should not affect files + used for multiple architectures, or for host or target architectures that + this host is not configured to build.
make uninstall
-
Does archuninstall and also deletes the other install directories include, db, - dbd, doc, html, templates and java. This will affect subsequent builds for other - architectures, but it doesn't delete their bin/<arch> or lib/<arch> - contents.
+
Does archuninstall and also deletes the other install directories include, + db, dbd, doc, html, templates and java. This will affect subsequent builds + for other architectures, but it doesn't delete their bin/<arch> or + lib/<arch> contents.
make realuninstall
Deletes all install directories for all architectures.
make distclean
-
Does realclean realuninstall as before, and also now does a cvsclean, which - removes file remnants from CVS operations named .#* and editor - backups named *~ throughout the source tree.
+
Does realclean realuninstall as before, and also now does a cvsclean, + which removes file remnants from CVS operations named .#* and + editor backups named *~ throughout the source tree.

Compress record type

-

This record now posts monitors on its NUSE field whenever its value changes. A new -field OUSE was added to support this.

+

This record now posts monitors on its NUSE field whenever its value changes. +A new field OUSE was added to support this.

Remove C++ build rule for .C files

An early convention on Unix systems was to name C++ files with an upper-case extention, .C. This does not work on Windows or MacOS where the -filesystems are case-insensitive, and the C++ build rule was causing problems so has -been eliminated. Any remaining C++ source files that are still using this convention -will have to be renamed, preferably to .cpp

+filesystems are case-insensitive, and the C++ build rule was causing problems so +has been eliminated. Any remaining C++ source files that are still using this +convention will have to be renamed, preferably to .cpp

Support make -s on Windows

@@ -66,9 +73,11 @@ combinations. This has now been fixed.

iocLogServer now supports logrotate

-

The feature in the iocLogServer that closed and reopened the logfile used to ignore -the SIGHUP signal when the log filename did not change. This has now been changed so -these logfiles can be used with the standard Linux logrotate package.

+

The feature in the iocLogServer that closed and reopened the logfile used to +ignore the SIGHUP signal when the log filename did not change. This has now been +changed so these logfiles can be used with the standard Linux logrotate +package.

+

Changes between 3.14.12 and 3.14.12.1

diff --git a/src/libCom/error/errlog.c b/src/libCom/error/errlog.c index 1cf1575bf..c5834057b 100644 --- a/src/libCom/error/errlog.c +++ b/src/libCom/error/errlog.c @@ -41,7 +41,6 @@ /*Declare storage for errVerbose */ epicsShareDef int errVerbose = 0; -static void errlogCleanup(void); static void exitHandler(void *); static void errlogThread(void); @@ -391,8 +390,15 @@ static void exitHandler(void *pvt) pvtData.atExit = 1; epicsEventSignal(pvtData.waitForWork); epicsEventMustWait(pvtData.waitForExit); + + free(pvtData.pbuffer); + epicsMutexDestroy(pvtData.flushLock); + epicsEventDestroy(pvtData.flush); + epicsEventDestroy(pvtData.waitForFlush); + epicsMutexDestroy(pvtData.listenerLock); + epicsMutexDestroy(pvtData.msgQueueLock); + epicsEventDestroy(pvtData.waitForWork); epicsEventDestroy(pvtData.waitForExit); - return; } struct initArgs { @@ -432,18 +438,6 @@ static void errlogInitPvt(void *arg) pvtData.errlogInitFailed = FALSE; } } - -static void errlogCleanup(void) -{ - free(pvtData.pbuffer); - epicsMutexDestroy(pvtData.flushLock); - epicsEventDestroy(pvtData.flush); - epicsEventDestroy(pvtData.waitForFlush); - epicsMutexDestroy(pvtData.listenerLock); - epicsMutexDestroy(pvtData.msgQueueLock); - epicsEventDestroy(pvtData.waitForWork); - /*Note that exitHandler must destroy waitForExit*/ -} epicsShareFunc int epicsShareAPI errlogInit2(int bufsize, int maxMsgSize) { @@ -514,7 +508,6 @@ static void errlogThread(void) epicsThreadSleep(.2); /*just wait an extra .2 seconds*/ epicsEventSignal(pvtData.waitForFlush); } - errlogCleanup(); epicsEventSignal(pvtData.waitForExit); }