libCom/osi: (posix) keep scheduling policy by thread, to support SCHED_RR

This commit is contained in:
Ralph Lange
2012-09-18 13:43:02 +02:00
parent 2485c1fb1c
commit 047bdc9200
3 changed files with 4 additions and 1 deletions

View File

@@ -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;

View File

@@ -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 */
}

View File

@@ -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;