diff --git a/src/libCom/osi/os/posix/osdThread.c b/src/libCom/osi/os/posix/osdThread.c index d9fc5bab8..3fa8e0ba9 100644 --- a/src/libCom/osi/os/posix/osdThread.c +++ b/src/libCom/osi/os/posix/osdThread.c @@ -184,8 +184,9 @@ void threadOnceOsd(threadOnceId *id, void (*func)(void *), void *arg) semMutexMustTake(onceMutex); if (*id == 0) { - *id = 1; + *id = -1; func(arg); + *id = 1; } semMutexGive(onceMutex); } diff --git a/src/libCom/osi/osiThread.h b/src/libCom/osi/osiThread.h index 200870c32..2cd7a5c37 100644 --- a/src/libCom/osi/osiThread.h +++ b/src/libCom/osi/osiThread.h @@ -44,7 +44,7 @@ epicsShareFunc void epicsShareAPI threadOnceOsd( #define threadOnce(id,func,arg) \ do { \ threadOnceId *idCopy =(id); \ - if(*idCopy == 0) \ + if(*idCopy <= 0) \ threadOnceOsd(idCopy,func,arg); \ } while(0)