diff options
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | chopstx.c | 18 |
2 files changed, 18 insertions, 4 deletions
@@ -1,3 +1,7 @@ +2016-06-29 NIIBE Yutaka <gniibe@fsij.org> + + * chopstx.c (chopstx_setpriority): Fix sched_lock/unlock. + 2016-06-28 NIIBE Yutaka <gniibe@fsij.org> * chopstx.h (struct chx_poll_head): Declare here. @@ -1880,10 +1880,20 @@ chopstx_setpriority (chopstx_prio_t prio) { struct chx_thread *tp = running; - tp->prio_orig = prio; - if (prio >= CHOPSTX_PRIO_INHIBIT_PREEMPTION) - chx_cpu_sched_lock (); - tp->prio = prio; + if (tp->prio < CHOPSTX_PRIO_INHIBIT_PREEMPTION + && prio >= CHOPSTX_PRIO_INHIBIT_PREEMPTION) + { + chx_cpu_sched_lock (); + tp->prio = tp->prio_orig = prio; + } + else if (tp->prio >= CHOPSTX_PRIO_INHIBIT_PREEMPTION + && prio < CHOPSTX_PRIO_INHIBIT_PREEMPTION) + { + tp->prio = tp->prio_orig = prio; + chx_cpu_sched_unlock (); + } + else + tp->prio = tp->prio_orig = prio; } /* |