[PATCH 3/8] libtest: Add T_do_is_runner()
Sebastian Huber
sebastian.huber at embedded-brains.de
Thu Aug 13 10:11:28 UTC 2020
Update #3199.
---
cpukit/libtest/t-test.c | 64 ++++++++++++++++++++++-------------------
1 file changed, 34 insertions(+), 30 deletions(-)
diff --git a/cpukit/libtest/t-test.c b/cpukit/libtest/t-test.c
index e8d0542c31..92aed62b9b 100644
--- a/cpukit/libtest/t-test.c
+++ b/cpukit/libtest/t-test.c
@@ -92,6 +92,40 @@ const T_check_context T_special = {
.flags = T_CHECK_FMT | T_CHECK_QUIET
};
+static bool
+T_do_is_runner(T_context *ctx)
+{
+ bool is_runner;
+#ifdef __rtems__
+ ISR_Level level;
+ const Per_CPU_Control *cpu_self;
+#endif
+
+#ifdef __rtems__
+ _ISR_Local_disable(level);
+ cpu_self = _Per_CPU_Get();
+
+ if (ctx->runner_thread != NULL) {
+ is_runner = cpu_self->isr_nest_level == 0 &&
+ _Per_CPU_Get_executing(cpu_self) == ctx->runner_thread;
+ } else {
+ is_runner = cpu_self == ctx->runner_cpu;
+ }
+
+ _ISR_Local_enable(level);
+#else
+ is_runner = ctx->runner_valid &&
+ pthread_equal(pthread_self(), ctx->runner_thread) != 0;
+#endif
+
+ return is_runner;
+}
+
+bool T_is_runner(void)
+{
+ return T_do_is_runner(&T_instance);
+}
+
typedef struct {
char *s;
size_t n;
@@ -952,36 +986,6 @@ T_main(const T_config *config)
return T_do_run_finalize(ctx) ? 0 : 1;
}
-bool T_is_runner(void)
-{
- T_context *ctx;
- bool is_runner;
-#ifdef __rtems__
- ISR_Level level;
- const Per_CPU_Control *cpu_self;
-#endif
-
- ctx = &T_instance;
-#ifdef __rtems__
- _ISR_Local_disable(level);
- cpu_self = _Per_CPU_Get();
-
- if (ctx->runner_thread != NULL) {
- is_runner = cpu_self->isr_nest_level == 0 &&
- _Per_CPU_Get_executing(cpu_self) == ctx->runner_thread;
- } else {
- is_runner = cpu_self == ctx->runner_cpu;
- }
-
- _ISR_Local_enable(level);
-#else
- is_runner = ctx->runner_valid &&
- pthread_equal(pthread_self(), ctx->runner_thread) != 0;
-#endif
-
- return is_runner;
-}
-
#ifdef __rtems__
RTEMS_LINKER_ROSET(_T, T_case_context *);
#endif /* __rtems__ */
--
2.26.2
More information about the devel
mailing list