diff --git a/src/scheduler/src/scheduler.c b/src/scheduler/src/scheduler.c index 46b411a3..f5d4dd50 100644 --- a/src/scheduler/src/scheduler.c +++ b/src/scheduler/src/scheduler.c @@ -14,11 +14,30 @@ #include "plugin.h" #include "preason.h" #include "resobj.h" +#include "resreq.h" #include "scheduler.h" #include "utils.h" #include "xcealloc.h" #include "xstring.h" +static int sched_session_active(xce_scheduler_t* sched) +{ + return atomic_load_explicit(&sched->session_active, + memory_order_acquire); +} + +static int sched_eval_in_progress(xce_scheduler_t* sched) +{ + return atomic_load_explicit(&sched->eval_in_progress, + memory_order_acquire); +} + +static int sched_staging_merge_complete(xce_scheduler_t* sched) +{ + return atomic_load_explicit(&sched->staging_merge_complete, + memory_order_acquire); +} + static void* sched_job_picker(void* arg) { xce_sched_plugin_t* job_picker = NULL; @@ -356,6 +375,8 @@ int sched_init(xce_scheduler_t* sched, xce_client_config_t* config, memset(sched, 0x0, sizeof(*sched)); + sel_optimize_set(1); /* enable CSE intern table for scheduler process */ + sched->nextid = 1; sched->configver = 0; diff --git a/src/scheduler/testsuite/meson.build b/src/scheduler/testsuite/meson.build index c1fa551f..b6ee31f2 100644 --- a/src/scheduler/testsuite/meson.build +++ b/src/scheduler/testsuite/meson.build @@ -2,7 +2,7 @@ scheduler_test_src = [ 'test.c' ] -scheduler_test_deps = [libxce_deps, librtti_dep, unity_dep] +scheduler_test_deps = [libxce_deps, librtti_dep, unity_dep, libxce_dep] incdir = include_directories('../include', '../../include', '.') diff --git a/src/scheduler/testsuite/test.c b/src/scheduler/testsuite/test.c index be2db2da..1a192a9c 100644 --- a/src/scheduler/testsuite/test.c +++ b/src/scheduler/testsuite/test.c @@ -5,6 +5,8 @@ #include #include +#include "resreq.h" + /* Minimal struct declaration to verify atomic fields exist. * We avoid including scheduler.h to prevent dependency on capnp headers. */ typedef struct { @@ -87,6 +89,20 @@ test_scheduler_t_has_atomic_gc_fields(void) TEST_ASSERT_EQUAL_INT(0, atomic_load(&sched.staging_merge_complete)); } +static void +test_sel_optimize_set_at_scheduler_startup(void) +{ + /* sel_optimize_set(1) is called in sched_init. + * Since we can't call sched_init (it starts threads/network), + * verify the setter/getter contract directly. */ + sel_optimize_set(1); + TEST_ASSERT_EQUAL_INT(1, sel_get_optimize_level()); + /* reset for clean test isolation */ +#ifdef UNIT_TEST + sel_optimize_test_reset(); +#endif +} + #define TEST(x) \ do { \ if (check_test(&arguments, #x)) { \ @@ -101,6 +117,7 @@ int main(int argc, char* argv[]) UNITY_BEGIN(); TEST(test_scheduler_t_has_atomic_gc_fields); + TEST(test_sel_optimize_set_at_scheduler_startup); return UNITY_END(); }