This patch provides minimal implementation of following
4 functions to handle SCHED_OTHER policy:
- sched_get_priority_min
- sched_get_priority_max
- pthread_getschedparam
- pthread_setschedparam
This implementation of these 4 functions is enough to make simple 'Hello World' -
https://github.com/cloudius-systems/osv-apps/tree/master/mono-example - run properly on OSv.
Fixes #34
Signed-off-by: Waldemar Kozaczuk <
jwkoz...@gmail.com>
---
libc/pthread.cc | 33 ++++++++++++++++++++++++---------
1 file changed, 24 insertions(+), 9 deletions(-)
diff --git a/libc/pthread.cc b/libc/pthread.cc
index 125d579f..9b4eb768 100644
--- a/libc/pthread.cc
+++ b/libc/pthread.cc
@@ -928,30 +928,45 @@ void pthread_exit(void *retval)
t->_thread->exit();
}
-int sched_get_priority_max(int policy)
+static int sched_get_priority_minmax(int policy)
{
- WARN_STUBBED();
- return EINVAL;
+ switch (policy) {
+ case SCHED_OTHER:
+ return 0;
+ default:
+ return EINVAL;
+ }
}
+// Following 4 functions provide minimal implementation
+// that ONLY covers default Linux SCHED_OTHER policy
int sched_get_priority_min(int policy)
{
- WARN_STUBBED();
- return EINVAL;
+ return sched_get_priority_minmax(policy);
+}
+
+int sched_get_priority_max(int policy)
+{
+ return sched_get_priority_minmax(policy);
}
int pthread_setschedparam(pthread_t thread, int policy,
const struct sched_param *param)
{
- WARN_STUBBED();
- return EINVAL;
+ switch (policy) {
+ case SCHED_OTHER:
+ return 0;
+ default:
+ return EINVAL;
+ }
}
int pthread_getschedparam(pthread_t thread, int *policy,
struct sched_param *param)
{
- WARN_STUBBED();
- return EINVAL;
+ *policy = SCHED_OTHER;
+ param->sched_priority = 0;
+ return 0;
}
int pthread_kill(pthread_t thread, int sig)
--
2.20.1