summaryrefslogtreecommitdiff
path: root/gcc/gthr-posix.h
diff options
context:
space:
mode:
authorthorpej <thorpej@138bc75d-0d04-0410-961f-82ee72b054a4>2002-10-29 18:23:02 +0000
committerthorpej <thorpej@138bc75d-0d04-0410-961f-82ee72b054a4>2002-10-29 18:23:02 +0000
commitf9f6f55aa6983fc95ad907cf2de5d635d1a8488c (patch)
tree1211af4b64b815810c777f183715ab35af995db0 /gcc/gthr-posix.h
parent2b7014df344c4d532e0902b0bd4ac800f4172425 (diff)
downloadgcc-f9f6f55aa6983fc95ad907cf2de5d635d1a8488c.tar.gz
* gthr-posix.h: Include <unistd.h> for feature tests.
(sched_get_priority_max, sched_get_priority_min) (pthread_getschedparam, pthread_setschedparam): Only use if _POSIX_THREAD_PRIORITY_SCHEDULING is defined. (__gthread_objc_thread_set_priority): Don't treat all non-zero returns from sched_get_priority_max and sched_get_priority_min as an error. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@58630 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/gthr-posix.h')
-rw-r--r--gcc/gthr-posix.h17
1 files changed, 14 insertions, 3 deletions
diff --git a/gcc/gthr-posix.h b/gcc/gthr-posix.h
index 80f6ff742a2..463cae07054 100644
--- a/gcc/gthr-posix.h
+++ b/gcc/gthr-posix.h
@@ -35,6 +35,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#define __GTHREADS 1
#include <pthread.h>
+#include <unistd.h>
typedef pthread_key_t __gthread_key_t;
typedef pthread_once_t __gthread_once_t;
@@ -67,15 +68,21 @@ typedef pthread_mutex_t __gthread_mutex_t;
#pragma weak pthread_mutex_init
#pragma weak pthread_mutex_destroy
#pragma weak pthread_self
+/* These really should be protected by _POSIX_PRIORITY_SCHEDULING, but
+ we use them inside a _POSIX_THREAD_PRIORITY_SCHEDULING block. */
+#ifdef _POSIX_THREAD_PRIORITY_SCHEDULING
#pragma weak sched_get_priority_max
#pragma weak sched_get_priority_min
+#endif /* _POSIX_THREAD_PRIORITY_SCHEDULING */
#pragma weak sched_yield
#pragma weak pthread_attr_destroy
#pragma weak pthread_attr_init
#pragma weak pthread_attr_setdetachstate
+#ifdef _POSIX_THREAD_PRIORITY_SCHEDULING
#pragma weak pthread_getschedparam
#pragma weak pthread_setschedparam
-#endif
+#endif /* _POSIX_THREAD_PRIORITY_SCHEDULING */
+#endif /* _LIBOBJC */
static inline int
__gthread_active_p (void)
@@ -173,6 +180,7 @@ __gthread_objc_thread_set_priority(int priority)
if (!__gthread_active_p())
return -1;
else {
+#ifdef _POSIX_THREAD_PRIORITY_SCHEDULING
pthread_t thread_id = pthread_self();
int policy;
struct sched_param params;
@@ -180,10 +188,10 @@ __gthread_objc_thread_set_priority(int priority)
if (pthread_getschedparam(thread_id, &policy, &params) == 0)
{
- if ((priority_max = sched_get_priority_max(policy)) != 0)
+ if ((priority_max = sched_get_priority_max(policy)) == -1)
return -1;
- if ((priority_min = sched_get_priority_min(policy)) != 0)
+ if ((priority_min = sched_get_priority_min(policy)) == -1)
return -1;
if (priority > priority_max)
@@ -200,6 +208,7 @@ __gthread_objc_thread_set_priority(int priority)
if (pthread_setschedparam(thread_id, policy, &params) == 0)
return 0;
}
+#endif /* _POSIX_THREAD_PRIORITY_SCHEDULING */
return -1;
}
}
@@ -208,6 +217,7 @@ __gthread_objc_thread_set_priority(int priority)
static inline int
__gthread_objc_thread_get_priority(void)
{
+#ifdef _POSIX_THREAD_PRIORITY_SCHEDULING
if (__gthread_active_p ())
{
int policy;
@@ -219,6 +229,7 @@ __gthread_objc_thread_get_priority(void)
return -1;
}
else
+#endif /* _POSIX_THREAD_PRIORITY_SCHEDULING */
return OBJC_THREAD_INTERACTIVE_PRIORITY;
}