Comment 8 for bug 1816841

Revision history for this message
Heinz Junkes (junkes) wrote :

I removed isEpicsThread from the struct too.

Put #if defined(_POSIX_THREAD_PRIORITY_SCHEDULING) ... around
the two new functions osi2posixPriority and posix2osiPriority to prevent warnings
if _POSIX_THREAD_PRIORITY_SCHEDULING is not set.

#if defined(_POSIX_THREAD_PRIORITY_SCHEDULING) && _POSIX_THREAD_PRIORITY_SCHEDULING > 0
static int osi2posixPriority(unsigned osiPriority)
{

    double maxPriority,minPriority,slope;
    int oss;

    if (!pcommonAttr->valid)
        return 0; /* assume SCHED_OTHER is in effect */

    if(pcommonAttr->maxPriority==pcommonAttr->minPriority)
        return(pcommonAttr->minPriority);

    maxPriority = (double)pcommonAttr->maxPriority;
    minPriority = (double)pcommonAttr->minPriority;
    slope = (double)(maxPriority - minPriority)/(double)(epicsThreadPriorityMax - epicsThreadPriorityMin);
    oss = (int)round( (double)(osiPriority - epicsThreadPriorityMin) * slope + minPriority );
    if ( oss < pcommonAttr->minPriority )
        oss = pcommonAttr->minPriority;
    if ( oss > pcommonAttr->maxPriority )
        oss = pcommonAttr->maxPriority;
    return oss;
}

static unsigned posix2osiPriority(int posixPriority)
{
double slope, osid;
unsigned osi;

    if ( ! pcommonAttr->valid )
        return epicsThreadPriorityMedium;

    if ( pcommonAttr->maxPriority == pcommonAttr->minPriority )
        return epicsThreadPriorityMedium;

    slope = (double)(epicsThreadPriorityMax - epicsThreadPriorityMin)
            / (double)(pcommonAttr->maxPriority - pcommonAttr->minPriority);

    osid = round( (double)(posixPriority - pcommonAttr->minPriority) * slope + epicsThreadPriorityMin );
    if ( osid < (double) epicsThreadPriorityMin ) {
        /* may be negative! */
        return epicsThreadPriorityMin;
    }
    osi = (unsigned)osid;

    if ( osi > epicsThreadPriorityMax )
        osi = epicsThreadPriorityMax;

    return osi;
}
#endif /* _POSIX_THREAD_PRIORITY_SCHEDULING */

Heinz