diff --git a/documentation/RELEASE_NOTES.md b/documentation/RELEASE_NOTES.md index ff3896a4e..7389a001a 100644 --- a/documentation/RELEASE_NOTES.md +++ b/documentation/RELEASE_NOTES.md @@ -23,6 +23,20 @@ SIMM=RAW support has been added for the relevant output record types RAW simulation mode will have those records do the appropriate conversion and write RVAL to the location pointed to by SIOL. +### Fixed leak from a non-EPICS thread + +On some targets, if a thread not created by `epicsThreadCreate*()` directly +or indirectly calls an `epicsThread*()` function, a specific tracking struct +is allocated. + +Prior to this release, on POSIX and WIN32 targets, this +struct would not be `free()`d, resulting in a memory leak. + +This release fixed the leak on POSIX targets. + +See the associated github [issue 241](https://github.com/epics-base/epics-base/issues/241) +for WIN32 status. + ### Fix `CHECK_RELEASE = WARN` This now works again, it was broken in 2019 (7.0.3.1) by an errant commit. diff --git a/modules/libcom/src/osi/os/RTEMS-score/osdThread.c b/modules/libcom/src/osi/os/RTEMS-score/osdThread.c index c0f9ba0bd..ac157f445 100644 --- a/modules/libcom/src/osi/os/RTEMS-score/osdThread.c +++ b/modules/libcom/src/osi/os/RTEMS-score/osdThread.c @@ -219,8 +219,7 @@ threadWrapper (rtems_task_argument arg) */ void epicsThreadExitMain (void) { - cantProceed("epicsThreadExitMain() has been deprecated for lack of usage." - " Please report if you see this message."); + cantProceed("epicsThreadExitMain() must no longer be used.\n"); } static rtems_status_code diff --git a/modules/libcom/src/osi/os/WIN32/osdThread.c b/modules/libcom/src/osi/os/WIN32/osdThread.c index b6c53ce80..e2faff813 100644 --- a/modules/libcom/src/osi/os/WIN32/osdThread.c +++ b/modules/libcom/src/osi/os/WIN32/osdThread.c @@ -260,8 +260,7 @@ static void epicsParmCleanupWIN32 ( win32ThreadParam * pParm ) */ LIBCOM_API void epicsStdCall epicsThreadExitMain ( void ) { - cantProceed("epicsThreadExitMain() has been deprecated for lack of usage." - " Please report if you see this message."); + cantProceed("epicsThreadExitMain() must no longer be used.\n"); } /* diff --git a/modules/libcom/src/osi/os/posix/osdThread.c b/modules/libcom/src/osi/os/posix/osdThread.c index 2bee0c6a2..da17d9b43 100644 --- a/modules/libcom/src/osi/os/posix/osdThread.c +++ b/modules/libcom/src/osi/os/posix/osdThread.c @@ -723,8 +723,7 @@ LIBCOM_API void epicsStdCall epicsThreadExitMain(void) epicsThreadInit(); - cantProceed("epicsThreadExitMain() has been deprecated for lack of usage." - " Please report if you see this message."); + cantProceed("epicsThreadExitMain() must no longer be used.\n"); pthreadInfo = (epicsThreadOSD *)pthread_getspecific(getpthreadInfo); if(pthreadInfo==NULL) diff --git a/modules/libcom/src/osi/os/vxWorks/osdThread.c b/modules/libcom/src/osi/os/vxWorks/osdThread.c index d0e087108..c7cc2f5eb 100644 --- a/modules/libcom/src/osi/os/vxWorks/osdThread.c +++ b/modules/libcom/src/osi/os/vxWorks/osdThread.c @@ -353,8 +353,7 @@ void epicsThreadResume(epicsThreadId id) void epicsThreadExitMain(void) { - cantProceed("epicsThreadExitMain() has been deprecated for lack of usage." - " Please report if you see this message."); + cantProceed("epicsThreadExitMain() must no longer be used.\n"); } unsigned int epicsThreadGetPriority(epicsThreadId id)