--- a/usr/src/lib/libc/port/rt/sched.c Wed Mar 26 15:33:06 2008 -0700
+++ b/usr/src/lib/libc/port/rt/sched.c Wed Mar 26 17:37:28 2008 -0700
@@ -609,6 +609,7 @@
break;
case SCHED_FIFO:
case SCHED_RR:
+ self->ul_rtclassid = pccp->pcc_info.pc_cid;
priority = ((rtparms_t *)pcparm.pc_clparms)->rt_pri;
policy =
((rtparms_t *)pcparm.pc_clparms)->rt_tqnsecs == RT_TQINF?
--- a/usr/src/lib/libc/port/threads/pthread.c Wed Mar 26 15:33:06 2008 -0700
+++ b/usr/src/lib/libc/port/threads/pthread.c Wed Mar 26 17:37:28 2008 -0700
@@ -57,7 +57,6 @@
} else {
if (policy == ulwp->ul_policy &&
(policy == SCHED_FIFO || policy == SCHED_RR) &&
- ulwp->ul_cid == ulwp->ul_rtclassid &&
ulwp->ul_epri != 0) {
/*
* Don't change the ceiling priority,
@@ -70,6 +69,8 @@
} else if ((cid = setparam(P_LWPID, tid, policy, prio)) == -1) {
error = errno;
} else {
+ if (policy == SCHED_FIFO || policy == SCHED_RR)
+ ulwp->ul_rtclassid = cid;
ulwp->ul_cid = cid;
ulwp->ul_pri = prio;
_membar_producer();
@@ -214,6 +215,8 @@
*/
param->sched_priority = ulwp->ul_pri;
} else {
+ if (*policy == SCHED_FIFO || *policy == SCHED_RR)
+ ulwp->ul_rtclassid = cid;
ulwp->ul_cid = cid;
ulwp->ul_pri = param->sched_priority;
_membar_producer();
--- a/usr/src/lib/libc/port/threads/thr.c Wed Mar 26 15:33:06 2008 -0700
+++ b/usr/src/lib/libc/port/threads/thr.c Wed Mar 26 17:37:28 2008 -0700
@@ -1320,6 +1320,7 @@
self->ul_policy = -1; /* initialize only when needed */
self->ul_pri = 0;
self->ul_cid = 0;
+ self->ul_rtclassid = -1;
self->ul_uberdata = udp;
if (oldself != NULL) {
int i;
@@ -1397,7 +1398,6 @@
/* tls_size was zero when oldself was allocated */
lfree(oldself, sizeof (ulwp_t));
}
- self->ul_rtclassid = get_info_by_policy(SCHED_FIFO)->pcc_info.pc_cid;
mutex_setup();
atfork_init();
signal_init();