svn commit: r238760 - stable/8/lib/libthr/thread
David Xu
davidxu at FreeBSD.org
Wed Jul 25 01:57:54 UTC 2012
Author: davidxu
Date: Wed Jul 25 01:57:53 2012
New Revision: 238760
URL: http://svn.freebsd.org/changeset/base/238760
Log:
Revert r238715, the revision breaks firefox.
Reported by: dougb
Modified:
stable/8/lib/libthr/thread/thr_setprio.c (contents, props changed)
stable/8/lib/libthr/thread/thr_setschedparam.c (contents, props changed)
Modified: stable/8/lib/libthr/thread/thr_setprio.c
==============================================================================
--- stable/8/lib/libthr/thread/thr_setprio.c Wed Jul 25 01:05:49 2012 (r238759)
+++ stable/8/lib/libthr/thread/thr_setprio.c Wed Jul 25 01:57:53 2012 (r238760)
@@ -45,22 +45,38 @@ _pthread_setprio(pthread_t pthread, int
int ret;
param.sched_priority = prio;
- if (pthread == curthread)
+ if (pthread == curthread) {
THR_LOCK(curthread);
- else if ((ret = _thr_find_thread(curthread, pthread, /*include dead*/0)))
- return (ret);
- if (pthread->attr.sched_policy == SCHED_OTHER ||
- pthread->attr.prio == prio) {
- pthread->attr.prio = prio;
- ret = 0;
- } else {
- ret = _thr_setscheduler(pthread->tid,
- pthread->attr.sched_policy, ¶m);
- if (ret == -1)
- ret = errno;
- else
+ if (curthread->attr.sched_policy == SCHED_OTHER ||
+ curthread->attr.prio == prio) {
+ curthread->attr.prio = prio;
+ ret = 0;
+ } else {
+ ret = _thr_setscheduler(curthread->tid,
+ curthread->attr.sched_policy, ¶m);
+ if (ret == -1)
+ ret = errno;
+ else
+ curthread->attr.prio = prio;
+ }
+ THR_UNLOCK(curthread);
+ } else if ((ret = _thr_ref_add(curthread, pthread, /*include dead*/0))
+ == 0) {
+ THR_THREAD_LOCK(curthread, pthread);
+ if (pthread->attr.sched_policy == SCHED_OTHER ||
+ pthread->attr.prio == prio) {
pthread->attr.prio = prio;
+ ret = 0;
+ } else {
+ ret = _thr_setscheduler(pthread->tid,
+ curthread->attr.sched_policy, ¶m);
+ if (ret == -1)
+ ret = errno;
+ else
+ pthread->attr.prio = prio;
+ }
+ THR_THREAD_UNLOCK(curthread, pthread);
+ _thr_ref_delete(curthread, pthread);
}
- THR_THREAD_UNLOCK(curthread, pthread);
return (ret);
}
Modified: stable/8/lib/libthr/thread/thr_setschedparam.c
==============================================================================
--- stable/8/lib/libthr/thread/thr_setschedparam.c Wed Jul 25 01:05:49 2012 (r238759)
+++ stable/8/lib/libthr/thread/thr_setschedparam.c Wed Jul 25 01:57:53 2012 (r238760)
@@ -53,25 +53,42 @@ _pthread_setschedparam(pthread_t pthread
struct pthread *curthread = _get_curthread();
int ret;
- if (pthread == curthread)
+ if (pthread == curthread) {
THR_LOCK(curthread);
- else if ((ret = _thr_find_thread(curthread, pthread,
- /*include dead*/0)) != 0)
- return (ret);
- if (pthread->attr.sched_policy == policy &&
- (policy == SCHED_OTHER ||
- pthread->attr.prio == param->sched_priority)) {
- pthread->attr.prio = param->sched_priority;
+ if (curthread->attr.sched_policy == policy &&
+ (policy == SCHED_OTHER ||
+ curthread->attr.prio == param->sched_priority)) {
+ pthread->attr.prio = param->sched_priority;
+ THR_UNLOCK(curthread);
+ return (0);
+ }
+ ret = _thr_setscheduler(curthread->tid, policy, param);
+ if (ret == -1)
+ ret = errno;
+ else {
+ curthread->attr.sched_policy = policy;
+ curthread->attr.prio = param->sched_priority;
+ }
+ THR_UNLOCK(curthread);
+ } else if ((ret = _thr_ref_add(curthread, pthread, /*include dead*/0))
+ == 0) {
+ THR_THREAD_LOCK(curthread, pthread);
+ if (pthread->attr.sched_policy == policy &&
+ (policy == SCHED_OTHER ||
+ pthread->attr.prio == param->sched_priority)) {
+ pthread->attr.prio = param->sched_priority;
+ THR_THREAD_UNLOCK(curthread, pthread);
+ return (0);
+ }
+ ret = _thr_setscheduler(pthread->tid, policy, param);
+ if (ret == -1)
+ ret = errno;
+ else {
+ pthread->attr.sched_policy = policy;
+ pthread->attr.prio = param->sched_priority;
+ }
THR_THREAD_UNLOCK(curthread, pthread);
- return (0);
+ _thr_ref_delete(curthread, pthread);
}
- ret = _thr_setscheduler(pthread->tid, policy, param);
- if (ret == -1)
- ret = errno;
- else {
- pthread->attr.sched_policy = policy;
- pthread->attr.prio = param->sched_priority;
- }
- THR_THREAD_UNLOCK(curthread, pthread);
return (ret);
}
More information about the svn-src-all
mailing list