summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2022-06-22 11:02:33 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2022-06-23 09:20:11 +0200
commitcd50bea678baa494640415377f7be146246ba3e4 (patch)
tree4adcddf4c426b2630c0af8b5a26757523fcf05af
parentTFTPFS: Fix test configuration for FP targets (diff)
downloadrtems-cd50bea678baa494640415377f7be146246ba3e4.tar.bz2
score: Use right clock for threadq timeouts
Use CLOCK_REALTIME and CLOCK_MONOTONIC for relative thread queue timeouts instead of CLOCK_REALTIME_COARSE and CLOCK_MONOTONIC_COARSE. This fixes an issue with clock_nanosleep() in combination with clock_gettime(). Close #4669.
-rw-r--r--cpukit/score/src/threadqtimeout.c4
-rw-r--r--testsuites/validation/tc-clock-nanosleep.c10
2 files changed, 10 insertions, 4 deletions
diff --git a/cpukit/score/src/threadqtimeout.c b/cpukit/score/src/threadqtimeout.c
index 271ea27f27..10e194f6d8 100644
--- a/cpukit/score/src/threadqtimeout.c
+++ b/cpukit/score/src/threadqtimeout.c
@@ -132,7 +132,7 @@ void _Thread_queue_Add_timeout_monotonic_timespec(
{
struct timespec now;
- _Timecounter_Getnanouptime( &now );
+ _Timecounter_Nanouptime( &now );
_Thread_queue_Add_timeout_timespec(
queue,
the_thread,
@@ -152,7 +152,7 @@ void _Thread_queue_Add_timeout_realtime_timespec(
{
struct timespec now;
- _Timecounter_Getnanotime( &now );
+ _Timecounter_Nanotime( &now );
_Thread_queue_Add_timeout_timespec(
queue,
the_thread,
diff --git a/testsuites/validation/tc-clock-nanosleep.c b/testsuites/validation/tc-clock-nanosleep.c
index 2857d8e274..2f4d439efe 100644
--- a/testsuites/validation/tc-clock-nanosleep.c
+++ b/testsuites/validation/tc-clock-nanosleep.c
@@ -325,14 +325,20 @@ static void Worker( rtems_task_argument arg )
while ( true ) {
T_scheduler_log *log;
+ uint32_t counter;
SuspendSelf();
log = T_scheduler_record_4( &ctx->scheduler_log );
T_null( log );
- _Timecounter_Getnanotime( &ctx->now_realtime );
- _Timecounter_Getnanouptime( &ctx->now_monotonic );
+ counter = GetTimecountCounter();
+ _Timecounter_Nanotime( &ctx->now_realtime );
+ SetTimecountCounter( counter );
+
+ counter = GetTimecountCounter();
+ _Timecounter_Nanouptime( &ctx->now_monotonic );
+ SetTimecountCounter( counter );
ctx->status = clock_nanosleep(
ctx->clock_id,