diff options
author | NIIBE Yutaka <gniibe@fsij.org> | 2016-06-29 16:36:53 +0900 |
---|---|---|
committer | NIIBE Yutaka <gniibe@fsij.org> | 2016-06-29 16:36:53 +0900 |
commit | 986518fba746fe50c98597665d1c4d349b631c1b (patch) | |
tree | 6700e61bb986ff8d931cfeb094dd76f7838fcdfe | |
parent | 15a4403f244f70234dce8f6a89ea94796dee3022 (diff) |
fix setpriority
-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; } /* |