---
lib/uksched/include/uk/sched.h | 18 ++++++++++++------
lib/uksched/sched.c | 1 +
lib/ukschedcoop/schedcoop.c | 5 +----
3 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/lib/uksched/include/uk/sched.h b/lib/uksched/include/uk/sched.h
index 0e8f1e26..2538e02d 100644
--- a/lib/uksched/include/uk/sched.h
+++ b/lib/uksched/include/uk/sched.h
@@ -86,6 +86,7 @@ struct uk_sched {
uk_sched_thread_get_tslice_func_t thread_get_tslice;
/* internal */
+ bool threads_started;
struct uk_thread idle;
struct uk_thread_list exited_threads;
struct ukplat_ctx_callbacks plat_ctx_cbs;
@@ -184,12 +185,6 @@ static inline struct uk_thread *uk_sched_get_idle(struct
uk_sched *s)
return &s->idle;
}
-/*
- * Public scheduler functions
- */
-
-void uk_sched_start(struct uk_sched *sched) __noreturn;
-
#define uk_sched_init(s, yield_func, \
thread_add_func, thread_remove_func, \
thread_set_prio_func, thread_get_prio_func, \
@@ -205,6 +200,17 @@ void uk_sched_start(struct uk_sched *sched) __noreturn;
uk_sched_register((s)); \
} while (0)
+/*
+ * Public scheduler functions
+ */
+
+void uk_sched_start(struct uk_sched *sched) __noreturn;
+
+static inline bool uk_sched_started(struct uk_sched *sched)
+{
+ return sched->threads_started;
+}
+
/*
* Internal thread scheduling functions
diff --git a/lib/uksched/sched.c b/lib/uksched/sched.c
index 5f6bc685..a6f49d67 100644
--- a/lib/uksched/sched.c
+++ b/lib/uksched/sched.c
@@ -121,6 +121,7 @@ struct uk_sched *uk_sched_create(struct uk_alloc *a, size_t
prv_size)
return NULL;
}
+ sched->threads_started = false;
sched->allocator = a;
UK_TAILQ_INIT(&sched->exited_threads);
sched->prv = (void *) sched + sizeof(struct uk_sched);
diff --git a/lib/ukschedcoop/schedcoop.c b/lib/ukschedcoop/schedcoop.c
index c19a276a..27afad2b 100644
--- a/lib/ukschedcoop/schedcoop.c
+++ b/lib/ukschedcoop/schedcoop.c
@@ -36,7 +36,6 @@
struct schedcoop_private {
struct uk_thread_list thread_list;
- int threads_started;
};
#ifdef SCHED_DEBUG
@@ -175,9 +174,8 @@ static void idle_thread_fn(void *unused __unused)
{
struct uk_thread *current = uk_thread_current();
struct uk_sched *s = current->sched;
- struct schedcoop_private *prv = s->prv;
- prv->threads_started = 1;
+ s->threads_started = true;
ukplat_lcpu_enable_irq();
while (1) {
@@ -206,7 +204,6 @@ struct uk_sched *uk_schedcoop_init(struct uk_alloc *a)
prv = sched->prv;
UK_TAILQ_INIT(&prv->thread_list);
- prv->threads_started = 0;
uk_sched_idle_init(sched, NULL, idle_thread_fn);