libtest: Add T_do_is_runner()

Update #3199.
This commit is contained in:
Sebastian Huber
2020-08-13 07:45:29 +02:00
parent e67eff2b53
commit a7af34d0cf

View File

@@ -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__ */