aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNIIBE Yutaka <gniibe@fsij.org>2016-06-29 16:36:53 +0900
committerNIIBE Yutaka <gniibe@fsij.org>2016-06-29 16:36:53 +0900
commit986518fba746fe50c98597665d1c4d349b631c1b (patch)
tree6700e61bb986ff8d931cfeb094dd76f7838fcdfe
parent15a4403f244f70234dce8f6a89ea94796dee3022 (diff)
fix setpriority
-rw-r--r--ChangeLog4
-rw-r--r--chopstx.c18
2 files changed, 18 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index c3f7f08..29d0813 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
diff --git a/chopstx.c b/chopstx.c
index b6bf1e7..625f889 100644
--- a/chopstx.c
+++ b/chopstx.c
@@ -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;
}
/*