diff --git a/modules/libcom/src/osi/os/vxWorks/osdThread.c b/modules/libcom/src/osi/os/vxWorks/osdThread.c index 7a0fe7b9f..8a24add1c 100644 --- a/modules/libcom/src/osi/os/vxWorks/osdThread.c +++ b/modules/libcom/src/osi/os/vxWorks/osdThread.c @@ -223,7 +223,14 @@ epicsThreadCreateOpt ( return((epicsThreadId)tid); } -void epicsThreadJoin(epicsThreadId id) {} +void epicsThreadJoin(epicsThreadId id) { +#if EPICS_THREAD_CAN_JOIN + int tid = (int)id; + + if (tid) + taskWait(tid, WAIT_FOREVER); +#endif +} void epicsThreadSuspendSelf() { diff --git a/modules/libcom/src/osi/os/vxWorks/osdThread.h b/modules/libcom/src/osi/os/vxWorks/osdThread.h index 09704b667..8fa454ce3 100644 --- a/modules/libcom/src/osi/os/vxWorks/osdThread.h +++ b/modules/libcom/src/osi/os/vxWorks/osdThread.h @@ -10,7 +10,13 @@ #ifndef osdThreadh #define osdThreadh -/* This target does not support joining threads */ -#define EPICS_THREAD_CAN_JOIN (0) +/* VxWorks 6.9 and later can support joining threads */ + +#if (_WRS_VXWORKS_MAJOR > 6) || \ + (_WRS_VXWORKS_MAJOR == 6 && _WRS_VXWORKS_MINOR >= 9) +# define EPICS_THREAD_CAN_JOIN (1) +#else +# define EPICS_THREAD_CAN_JOIN (0) +#endif #endif /* osdThreadh */