From 047bdc9200fc63264f8b9a39f2ffa2f0031e816b Mon Sep 17 00:00:00 2001 From: Ralph Lange Date: Tue, 18 Sep 2012 13:43:02 +0200 Subject: [PATCH] libCom/osi: (posix) keep scheduling policy by thread, to support SCHED_RR --- src/libCom/osi/os/Linux/osdThread.h | 1 + src/libCom/osi/os/posix/osdThread.c | 3 ++- src/libCom/osi/os/posix/osdThread.h | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/libCom/osi/os/Linux/osdThread.h b/src/libCom/osi/os/Linux/osdThread.h index 859749837..5cc26d722 100644 --- a/src/libCom/osi/os/Linux/osdThread.h +++ b/src/libCom/osi/os/Linux/osdThread.h @@ -26,6 +26,7 @@ typedef struct epicsThreadOSD { pid_t lwpId; pthread_attr_t attr; struct sched_param schedParam; + int schedPolicy; EPICSTHREADFUNC createFunc; void *createArg; epicsEventId suspendEvent; diff --git a/src/libCom/osi/os/posix/osdThread.c b/src/libCom/osi/os/posix/osdThread.c index 92bc572f0..ba5a1269c 100644 --- a/src/libCom/osi/os/posix/osdThread.c +++ b/src/libCom/osi/os/posix/osdThread.c @@ -129,6 +129,7 @@ static void setSchedulingPolicy(epicsThreadOSD *pthreadInfo,int policy) &pthreadInfo->attr,&pthreadInfo->schedParam); checkStatusOnce(status,"pthread_attr_getschedparam"); pthreadInfo->schedParam.sched_priority = getOssPriorityValue(pthreadInfo); + pthreadInfo->schedPolicy = policy; status = pthread_attr_setschedpolicy( &pthreadInfo->attr,policy); checkStatusOnce(status,"pthread_attr_setschedpolicy"); @@ -615,7 +616,7 @@ epicsShareFunc void epicsShareAPI epicsThreadSetPriority(epicsThreadId pthreadIn &pthreadInfo->attr,&pthreadInfo->schedParam); if(errVerbose) checkStatus(status,"pthread_attr_setschedparam"); status = pthread_setschedparam( - pthreadInfo->tid,pcommonAttr->schedPolicy,&pthreadInfo->schedParam); + pthreadInfo->tid, pthreadInfo->schedPolicy, &pthreadInfo->schedParam); if(errVerbose) checkStatus(status,"pthread_setschedparam"); #endif /* _POSIX_THREAD_PRIORITY_SCHEDULING */ } diff --git a/src/libCom/osi/os/posix/osdThread.h b/src/libCom/osi/os/posix/osdThread.h index 8da859e94..7807fda6e 100644 --- a/src/libCom/osi/os/posix/osdThread.h +++ b/src/libCom/osi/os/posix/osdThread.h @@ -25,6 +25,7 @@ typedef struct epicsThreadOSD { pthread_t tid; pthread_attr_t attr; struct sched_param schedParam; + int schedPolicy; EPICSTHREADFUNC createFunc; void *createArg; epicsEventId suspendEvent;