diff --git a/src/libCom/test/epicsMutexPriorityInversionTest.c b/src/libCom/test/epicsMutexPriorityInversionTest.c index 7445ed1c9..f04aff0de 100644 --- a/src/libCom/test/epicsMutexPriorityInversionTest.c +++ b/src/libCom/test/epicsMutexPriorityInversionTest.c @@ -1,6 +1,8 @@ #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif + +#include #include #include #include @@ -16,6 +18,12 @@ #define SPIN_SECS 3000000 +#if defined(__GLIBC__) && defined(__GLIBC_PREREQ) && __GLIBC_PREREQ(2,4) +#define HAVE_CPU_AFFINITY +#else +#undef HAVE_CPU_AFFINITY +#endif + typedef struct ThreadArg_ { epicsEventId sync; epicsEventId done; @@ -39,11 +47,13 @@ struct timespec now; */ static void setThreadAffinity(int cpu) { +#ifdef HAVE_CPU_AFFINITY cpu_set_t cset; CPU_ZERO( &cset ); CPU_SET( cpu, &cset ); testOk1 ( 0 == pthread_setaffinity_np( pthread_self(), sizeof(cset), &cset ) ); +#endif } /* @@ -51,6 +61,7 @@ cpu_set_t cset; */ static void checkAffinity(int cpu) { +#ifdef HAVE_CPU_AFFINITY cpu_set_t cset; if ( pthread_getaffinity_np( pthread_self(), sizeof(cset), &cset) ) { @@ -58,6 +69,7 @@ cpu_set_t cset; return; } testOk ( 1 == CPU_COUNT( &cset ) && CPU_ISSET( cpu, &cset ), "Checking CPU affinity mask" ); +#endif } @@ -212,6 +224,12 @@ struct sched_param p_pri; testPlan(NUM_TESTS); +#ifndef HAVE_CPU_AFFINITY +#warning "glibc too old for this test: pthread_setaffinity_np() not available..." + testSkip( NUM_TESTS, "glibc too old for this test: pthread_setaffinity_np() not implemented!" ); + return testDone(); +#endif + p_pri.sched_priority = sched_get_priority_min( SCHED_FIFO ); if ( sched_setscheduler( 0, SCHED_FIFO, &p_pri ) ) { testDiag("SCHED_FIFO not engaged - maybe you need to be root to run this test?");