diff --git a/src/libCom/osi/os/vxWorks/osdThread.c b/src/libCom/osi/os/vxWorks/osdThread.c index 5aac9ad1c..05a60a97f 100644 --- a/src/libCom/osi/os/vxWorks/osdThread.c +++ b/src/libCom/osi/os/vxWorks/osdThread.c @@ -101,18 +101,19 @@ void threadOnceOsd(threadOnceId *id, void (*func)(void *), void *arg) } semGive(threadOnceMutex); } - + static void createFunction(THREADFUNC func, void *parm) { int tid = taskIdSelf(); taskVarAdd(tid,(int *)&papTSD); + /*Make sure that papTSD is still 0 after that call to taskVarAdd*/ papTSD = 0; (*func)(parm); taskVarDelete(tid,(int *)&papTSD); free(papTSD); } - + threadId threadCreate(const char *name, unsigned int priority, unsigned int stackSize, THREADFUNC funptr,void *parm) @@ -297,20 +298,17 @@ void threadPrivateDelete(threadPrivateId id) void threadPrivateSet (threadPrivateId id, void *pvt) { int indpthreadPrivate = (int)id; + int nthreadPrivateOld = 0; + + if(papTSD) nthreadPrivateOld = (int)papTSD[0]; + if(!papTSD || (nthreadPrivateOld