From 722d5eeba77a1f26cfcbdf1e81cc681fa926bd3d Mon Sep 17 00:00:00 2001 From: Ralph Lange Date: Sun, 18 May 2014 17:24:38 +0200 Subject: [PATCH] libCom/osi: use epicsThreadGetCPUs implementation from thread-pool branch (posix, WIN32) --- src/libCom/osi/os/WIN32/osdThread.c | 6 +++++- src/libCom/osi/os/posix/osdThread.c | 13 ++++++++++++- src/libCom/test/epicsThreadTest.cpp | 6 +++++- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/libCom/osi/os/WIN32/osdThread.c b/src/libCom/osi/os/WIN32/osdThread.c index 70b9b53d2..c88b0e689 100644 --- a/src/libCom/osi/os/WIN32/osdThread.c +++ b/src/libCom/osi/os/WIN32/osdThread.c @@ -1110,7 +1110,11 @@ epicsShareFunc void * epicsShareAPI epicsThreadPrivateGet ( epicsThreadPrivateId */ epicsShareFunc int epicsThreadGetCPUs ( void ) { - return atoi(getenv("NUMBER_OF_PROCESSORS")); + SYSTEM_INFO sysinfo; + GetSystemInfo(&sysinfo); + if (sysinfo.dwNumberOfProcessors > 0) + return sysinfo.dwNumberOfProcessors; + return 1; } #ifdef TEST_CODES diff --git a/src/libCom/osi/os/posix/osdThread.c b/src/libCom/osi/os/posix/osdThread.c index 00fbdc936..18cc0b67b 100644 --- a/src/libCom/osi/os/posix/osdThread.c +++ b/src/libCom/osi/os/posix/osdThread.c @@ -875,5 +875,16 @@ epicsShareFunc double epicsShareAPI epicsThreadSleepQuantum () epicsShareFunc int epicsThreadGetCPUs(void) { - return sysconf(_SC_NPROCESSORS_ONLN); + long ret; +#ifdef _SC_NPROCESSORS_ONLN + ret = sysconf(_SC_NPROCESSORS_ONLN); + if (ret > 0) + return ret; +#endif +#ifdef _SC_NPROCESSORS_CONF + ret = sysconf(_SC_NPROCESSORS_CONF); + if (ret > 0) + return ret; +#endif + return 1; } diff --git a/src/libCom/test/epicsThreadTest.cpp b/src/libCom/test/epicsThreadTest.cpp index b1e28bb8c..f80d3da7e 100644 --- a/src/libCom/test/epicsThreadTest.cpp +++ b/src/libCom/test/epicsThreadTest.cpp @@ -81,7 +81,11 @@ static void thread(void *arg) MAIN(epicsThreadTest) { - testPlan(8); + testPlan(9); + + unsigned int ncpus = epicsThreadGetCPUs(); + testDiag("System has %u CPUs", ncpus); + testOk1(ncpus > 0); const int ntasks = 3; myThread *myThreads[ntasks];